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をクリックする.
6. プロジェクトディレクトリにソースファイルをコピーする.
ターミナルアプリケーション(/Applications/Terminal.app)を起動し,Wolframシステムがインストールされているディレクトリに変更(cd)する.そのディレクトリに到達したら,cdで$InstallationDirectory/SystemFiles/Links/WSTP/DeveloperKit/MacOSX-x86-64/WSTPExamplesを指定する.
cd "/Applications/Mathematica.app/Contents/SystemFiles/Links/WSTP/DeveloperKit/MacOSX-x86-64/WSTPExamples"
コピーコマンド(cp)を使って,ステップ4で選んだプロジェクトディレクトリにaddtwoソースファイルをコピーする.
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ウィンドウから,XcodeのaddtwoワークスペースウィンドウのNavigator areaのaddtwoフォルダアイコンまでwstp.hファイルをドラッグする.Choose options for adding these filesシートが現れる.Copy items into destination folderがチェックされていないことを確認してFinishボタンをクリックする.
- Finderウィンドウから,XcodeのaddtwoワークスペースウィンドウのNavigator areaのaddtwoフォルダアイコンまでlibWSTPi4.aファイルをドラッグする.Copy items into destination folderがチェックされていないことを確認してFinishボタンをクリックする.
- XcodeのaddtwoワークスペースウィンドウのNavigator areaのaddtwoに対する青いプロジェクトアイコンをクリックする.TARGETSセクションの下のaddtwoターゲットをクリックする.Build Settingsタブをクリックする.Linking ▶ Other Linker Flags要素をブラウズし,-lc++と-framework Foundationをテキストエントリ枠に加える.
ファイル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プロジェクトのためのディレクトリを作成する.addtwoプロジェクトをgitのレポジトリにする必要があるかどうかにより,Source Controlチェックボックスのチェックを付けるか外すかする.Createをクリックする.
6. プロジェクトディレクトリにソースファイルをコピーする.
ターミナルアプリケーション(/Applications/Terminal.app)を起動し,Wolframシステムがインストールされているディレクトリに変更(cd)する.そのディレクトリに到達したら,cdで$InstallationDirectory/SystemFiles/Links/WSTP/DeveloperKit/MacOSX-x86-64/WSTPExamplesを指定する.
cd "/Applications/Mathematica.app/Contents/SystemFiles/Links/WSTP/DeveloperKit/MacOSX-x86-64/WSTPExamples"
コピーコマンド(cp)を使って,ステップ4で選んだプロジェクトディレクトリにfactorソースファイルをコピーする.
- Ctrlキーを押したままでMathematicaアイコンをクリックする.ポップアップメニューが現れる.パッケージの内容を表示を選ぶとMathematicaのコンテンツが見られる.フォルダContents/SystemFiles/Links/Links/WSTP/DeveloperKit/MacOSX/CompilerAdditionsを開く.
- Finderウィンドウから,XcodeのfactorワークスペースウィンドウのNavigator areaのfactorフォルダアイコンまでwstp.hファイルをドラッグする.Choose options for adding these filesシートが現れる.Copy items into destination folderがチェックされていないことを確認してFinishボタンをクリックする.
- XcodeのfactorワークスペースウィンドウのNavigator areaのfactorに対する青いプロジェクトアイコンをクリックする.TARGETSセクションの下のfactorターゲットをクリックする.Build Settingsタブをクリックする.Linking ▶ Other Linker Flags要素をブラウズし,-lc++と-framework Foundationをテキストエントリ枠に加える.
ファイル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プログラムを構築する」のセクションで説明してある.