构建 WSTP 程序
WSTP 开发工具包位于 Wolfram 系统目录中的 $InstallationDirectory /SystemFiles/Links/WSTP/DeveloperKit/MacOSX-x86-64 目录下.

建议安装

CompilerAdditions 安装

另一种方法是把这些组件 ( wstp.h 、libWSTPi4.a、wstp.framework) 复制到编译器能自动搜索类似文件的目录中. 对于 wstp.h 和 libWSTPi4.a 来说,这些目录一般分别是 /usr/include 或 /usr/lib,而对 wstp.framework 来说则是 /Library/Frameworks 或 ~/Library/Frameworks. 在许多系统中,不是所有用户都对这些目录有写的权限.

WSTPExamples 安装

WSTP 框架组件

CompilerAdditions 目录

wstp.h
wstp.h 是一个必须包含在 C 和 C++ 源文件中的头文件. 它应该放在你的编译器可以找到的地方. 你可以把它复制到和源文件同样的目录下,或复制到和标准头文件同样的目录下,或者不用管它,但是把 WSTP 目录添加到头文件的搜索路径中.
libWSTPi4.a
wstp.framework
wsprep
wsprep 是一个应用程序,通过处理 模板 文件自动编写 WSTP 程序. 把该应用程序复制到你的项目目录中或创建一个别名会方便应用.
wscc 是一个预处理和编译 WSTP 源文件的脚本.

WSTPExamples 目录

PrebuiltExamples 目录

该目录包含范例程序的预建版本. 运行 WSTP 程序 描述了如何运行两个这样的程序. 构建 WSTP 程序 描述了如何使用 WSTPExamples 目录中的源代码构建自己的程序.
构建 WSTP 程序的一般过程是在任何调用 WSTP 函数的 C 或 C++ 源文件中包含 wstp.h ,编译源文件,然后把 libWSTPi4.a 库或 wstp.framework 以及应用程序需要的任何其他标准库与结果对象代码相链接. 如果你的应用程序使用 WSTP 模板机制,那么你的模板文件必须首先使用 wsprep 处理成 C 源文件.

使用 WSTP 模板文件

如果你的程序使用 WSTP 和外部程序通讯 中描述的 WSTP 模板机制,你必须同时使用 wsprep 应用程序预处理包含模板项的源文件.(模板项是包含模板关键字的行序列,每一项定义当调用相关 C 函数时的 Wolfram 语言函数.)当 wsprep 处理这类文件时,它会把模板项转换成 C 函数,而无需改变其他文本,并使用 WSTP 应用远程过程调用机制编写其他 C 函数. 结果是可用于编译的 C 源文件.
wsprep addtwo.tm -o addtwotm.c
addtwotm.c  :  addtwo.tm
wsprep addtwo.tm -o addtwotm.c

从命令行构建 WSTP 程序

使用 Makefile

# This makefile can be used to build all or some of the sample
# programs. To build all of them, use the command
# 'make all'. To build one, say addtwo, use the command
# 'make addtwo'.

WSLINKDIR = /Applications/Mathematica.app/Contents/SystemFiles/Links/WSTP/DeveloperKit
SYS = MacOSX-x86-64
CADDSDIR = ${WSLINKDIR}/${SYS}/CompilerAdditions

INCDIR = ${CADDSDIR}
LIBDIR = ${CADDSDIR}

WSPREP = ${CADDSDIR}/wsprep

EXTRA_LIBS = -lc++ -framework Foundation

WSTP_LIB = -lWSTPi4

all : addtwo bitops counter factor factor2 factor3 quotient reverse sumalist

addtwo : addtwotm.o addtwo.o
    ${CC} -I${INCDIR} addtwotm.o addtwo.o -L${LIBDIR} ${WSTP_LIB} ${EXTRA_LIBS} -o $@

bitops : bitopstm.o bitops.o
    ${CC} -I${INCDIR} bitopstm.o bitops.o -L${LIBDIR} ${WSTP_LIB} ${EXTRA_LIBS} -o $@

counter : countertm.o
    ${CC} -I${INCDIR} countertm.o -L${LIBDIR} ${WSTP_LIB} ${EXTRA_LIBS} -o $@

factor : factor.o
    ${CC} -I${INCDIR} factor.o -L${LIBDIR} ${WSTP_LIB} ${EXTRA_LIBS} -o $@

factor2 : factor2.o
    ${CC} -I${INCDIR} factor2.o -L${LIBDIR} ${WSTP_LIB} ${EXTRA_LIBS} -o $@

factor3 : factor3.o
    ${CC} -I${INCDIR} factor3.o -L${LIBDIR} ${WSTP_LIB} ${EXTRA_LIBS} -o $@

quotient : quotient.o
    ${CC} -I${INCDIR} quotient.o -L${LIBDIR} ${WSTP_LIB} ${EXTRA_LIBS} -o $@

reverse : reversetm.o
    ${CC} -I${INCDIR} reversetm.o -L${LIBDIR} ${WSTP_LIB} ${EXTRA_LIBS} -o $@

sumalist : sumalisttm.o sumalist.o
    ${CC} -I${INCDIR} sumalisttm.o sumalist.o -L${LIBDIR} ${WSTP_LIB} ${EXTRA_LIBS} -o $@

.c.o :
    ${CC} -c -I${INCDIR} $<

addtwotm.c : addtwo.tm
    ${WSPREP} $? -o $@

bitopstm.c : bitops.tm
    ${WSPREP} $? -o $@

countertm.c : counter.tm
    ${WSPREP} $? -o $@

reversetm.c : reverse.tm
    ${WSPREP} $? -o $@

sumalisttm.c : sumalist.tm
    ${WSPREP} $? -o $@

库依赖

用 Xcode 构建 Mac OS X WSTP 程序

Xcode 6.x+

创建一个 addtwo 项目

1. 启动 Xcode

2. File 菜单,选择 New Project .

会出现 Choose a template for your new project 对话框.

3. OS X 下点击 Application . 然后点击 Command Line Tool 图标. 点击 Next .

会出现 Choose options for your new project 对话框.

4. Product Name 文本框中输入 addtwo . 在 Type 的下拉菜单中,选择 C . 不选 Use Automatic Reference Counting 复选框. 点击 Next .

会出现 Choose Folder 对话框.

5. 在你的文件系统为 addtwo 项目创建一个目录. 根据你的需要确定是否为 addtwo 项目创建 git 仓库来选择 Source Control 复选框. 点击 Create .

Xcode 会打开 addtwo 工作表.

6. 把源文件复制到项目目录.

启动终端应用(/Applications/Terminal.app)并改变为( cd )安装 Wolfram 系统的目录. 然后, cd $InstallationDirectory /SystemFiles/Links/WSTP/DeveloperKit/MacOSX-x86-64/WSTPExamples.

使用复制( cp )命令把 addtwo 源文件复制到你在步骤 4 中选择的项目目录中.

7. 在模板文件中运行 wsprep .

把目录变为项目目录.

使用 wsprep 产生一个源文件.

8. 往项目中添加文件.

9. 从项目中去除 main.c.

右击文件 main.c 并选择 Delete . 在下拉菜单中选择 Move to Trash 按钮.

10. 构建项目.

Project 菜单,选择 Build .

创建一个 Factor 项目

1. 启动 Xcode

2. File 菜单中,选择 New Project .

会出现 Choose a template for your new project 对话框.

3. OS X 部分,点击 Application . 然后点击 Command Line Tool 图标. 点击 Next .

会出现 Choose options for your new project 对话框.

4. Product Name 文本框中输入 factor . 从 Type 下拉菜单中选择 C . 不选 Use Automatic Reference Counting 复选框. 点击 Next .

会打开 Choose Folder 对话框.

5. 在你的文件系统为 factor 项目创建一个目录. 根据你的需要确定是否为 factor 项目创建 git 仓库来选择 Source Control 复选框. 点击 Create .

Xcode 会打开 addtwo 工作表.

6. 把源文件复制到项目目录.

启动终端应用(/Applications/Terminal.app)并改变为( cd )安装 Wolfram 系统的目录. 然后, cd $InstallationDirectory /SystemFiles/Links/WSTP/DeveloperKit/MacOSX-x86-64/WSTPExamples.

使用复制( cp )命令把 factor 源文件复制到你在步骤4中选择的项目目录中.

7. 往项目中添加文件.

8. 从项目中去除 main.c.

右击文件 main.c 并选择 Delete . 在下拉菜单中选择 Move to Trash 按钮.

9. 构建项目.

Project 菜单,选择 Build .

使用 wscc

wscc 是一个预处理和编译 WSTP 源文件的脚本. 它会预处理任何以 .tm 结尾的文件中的 WSTP模板,然后在结果的 C 源代码中调用 cc. wscc 会直接传递命令行选项和其他文件至 cc. 以下是使用 wscc 构建 addtwo 应用的命令.
wscc addtwo.tm addtwo.c -o addtwo
构建 WSTP 程序 中的说明描述了如何使用 WSTPExamples 目录中的源代码构建两个 WSTP 程序. 这两个程序, addtwo factor 已存在于 PrebuiltExamples 文件夹. 在构建你自己的之前,应该试着运行预建的范例以验证 WSTP 系统附件是否安装且正常工作,并学习当正确构建时这些范例会有怎样的结果. 其他说明是假设你正在使用开发程序包中的程序.

在 Wolfram 语言内核中运行预建范例

Install [ ] 调用 LinkOpen [ ] ,然后和外部程序交换信息,设置 AddTwo[] 的定义. 你无需考虑这些细节,但是如果你很好奇,可执行以下命令:

从一个预建的范例中调用 Wolfram 语言内核

支持的链接协议

C 函数 WSOpenArgcArgv ( ) 和 Wolfram 语言函数 LinkOpen [ ] 的细节请参见 WSTP 和外部程序通讯 . 在 Macintosh OS X 机器中, LinkProtocol 选项的合法值为 TCPIP TCP SharedMemory Pipes 和 IntraProcess . LinkProtocol 是用于从一端到另一端传输数据的机制. SharedMemory LinkMode->Launch 链接的默认协议. LinkMode->Listen LinkMode->Connect 链接的默认值是 SharedMemory .