用 C 语言开发 WSTP (Mac OS X)
建议安装
CompilerAdditions 安装
WSTPExamples 安装
WSTP 框架组件
CompilerAdditions 目录
wstp.h
libWSTPi4.a
wstp.framework
wsprep
WSTPExamples 目录
PrebuiltExamples 目录
使用 WSTP 模板文件
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 项目
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.
5. 在你的文件系统为 addtwo 项目创建一个目录. 根据你的需要确定是否为 addtwo 项目创建 git 仓库来选择 Source Control 复选框. 点击 Create.
启动终端应用(/Applications/Terminal.app)并改变为(cd)安装 Wolfram 系统的目录. 然后,cd 到 $InstallationDirectory/SystemFiles/Links/WSTP/DeveloperKit/MacOSX-x86-64/WSTPExamples.
cd "/Applications/Mathematica.app/Contents/SystemFiles/Links/WSTP/DeveloperKit/MacOSX-x86-64/WSTPExamples"
使用复制(cp)命令把 addtwo 源文件复制到你在步骤 4 中选择的项目目录中.
7. 在模板文件中运行 wsprep.
使用 wsprep 产生一个源文件.
/Applications/Mathematica.app/Contents/SystemFiles/Links/WSTP/DeveloperKit/MacOSX-x86-64/CompilerAdditions/wsprep addtwo.tm -o addtwo.tm.c
- 当按住 Ctrl 键时点击 Mathematica 图标. 会出现弹出菜单. 选择 Show Package Contents 查看 Mathematica 的内容. 打开文件夹 Contents/SystemFiles/Links/WSTP/DeveloperKit/MacOSX/CompilerAdditions.
- 从 Finder 窗口中把文件 wstp.h 拖至 Xcode addtwo 工作空间窗口的 Navigator area 中的 addtwo 文件夹图标中. 会出现 Choose options for adding these files 对话框. 确保没有选择 Copy items into destination folder 复选框,然后点击 Finish 按钮.
- 从 Finder 窗口中把文件 libWSTPi4.a 拖至 Xcode addtwo 工作空间窗口的 Navigator area 中的 addtwo 文件夹图标中. 确保没有选择 Copy items into destination folder 复选框,然后点击 Finish 按钮..
- 在 Xcode addtwo 工作空间窗口的 Navigator area 中点击 addtwo 的蓝色项目图标. 点击 TARGETS 下的 addtwo 目标. 点击 Build Settings 标签. 浏览至 Linking ▶ Other Linker Flags 元素并在文本输入窗格添加 -lc++ 和 -framework 基础.
右击文件 main.c 并选择 Delete. 在下拉菜单中选择 Move to Trash 按钮.
创建一个 Factor 项目
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.
5. 在你的文件系统为 factor 项目创建一个目录. 根据你的需要确定是否为 factor 项目创建 git 仓库来选择 Source Control 复选框. 点击 Create.
启动终端应用(/Applications/Terminal.app)并改变为(cd)安装 Wolfram 系统的目录. 然后,cd 到 $InstallationDirectory/SystemFiles/Links/WSTP/DeveloperKit/MacOSX-x86-64/WSTPExamples.
cd "/Applications/Mathematica.app/Contents/SystemFiles/Links/WSTP/DeveloperKit/MacOSX-x86-64/WSTPExamples"
使用复制(cp)命令把 factor 源文件复制到你在步骤4中选择的项目目录中.
- 当按住 Ctrl 键时点击 Mathematica 图标. 会出现弹出菜单. 选择 Show Package Contents 查看 Mathematica 的内容. 打开文件夹 Contents/SystemFiles/Links/WSTP/DeveloperKit/MacOSX/CompilerAdditions.
- 从 Finder 窗口中把文件 wstp.h 拖至 Xcode factor 工作空间窗口的 Navigator area 中的 factor 文件夹图标中. 会出现 Choose options for adding these files 对话框. 确保没有选择 Copy items into destination folder 复选框,然后点击 Finish 按钮.
- 从 Finder 窗口中把文件 libWSTPi4.a 拖至 Xcode factor 工作空间窗口的 Navigator area 中的 factor 文件夹图标中. 确保没有选择 Copy items into destination folder 复选框,然后点击 Finish 按钮.
- 在 Xcode factor 工作空间窗口的 Navigator area 中点击 factor 的蓝色项目图标. 点击 TARGETS 下的 factor 目标. 点击 Build Settings 标签. 浏览至 Linking ▶ Other Linker Flags 元素并在文本输入窗格添加 -lc++ 和 -framework 基础.
右击文件 main.c 并选择 Delete. 在下拉菜单中选择 Move to Trash 按钮.
使用 wscc
wscc addtwo.tm addtwo.c -o addtwo
在 Wolfram 语言内核中运行预建范例
:Begin:
:Function: addtwo
:Pattern: AddTwo[i_Integer, j_Integer]
:Arguments: { i, j }
:ArgumentTypes: { Integer, Integer }
:ReturnType: Integer
:End:
:Evaluate: AddTwo::usage = "AddTwo[x, y] gives the sum of two machine integers x and y."
int addtwo( int i, int j)
{
return i+j;
}
int main(int argc, char* argv[])
{
return WSMain(argc, argv);
}
从一个预建的范例中调用 Wolfram 语言内核
factor -linkmode launch -linkname '"/Applications/Mathematica.app/Contents/MacOS/WolframKernel" -wstp'
支持的链接协议
- 一旦你的程序正常工作,就可关闭编译器优化功能. 这可使编译速度更快,更容易调试,另外,优化可能被打断,会导致一些问题.(优化代码使用的堆栈和寄存器的方式不同于非优化的代码,可能暴露或掩盖代码中的错误. 例如,返回一个局部变量指针时出现的常见错误可能会或不会导致问题,其取决于堆栈和寄存器使用.)
- 检查从 WSTP 库函数的返回值或在你的程序关键部分调用 WSError(). WSTP 往往可以告诉你什么地方出了错.
- 文件 wstp.h 和 libWSTPi4.a 是配套的集合. 如果你在使用早期的 WSTP 版本,当建立你的应用程序时,应该注意不要混淆它们.
- 检查你使用的 C 编译器是否支持雏形,如果不支持,你需要改变代码或构建项目的方式. 详细解释请参见“构建 WSTP 程序”.