matlab から呼び出される C コードをコンパイルする必要があります (mex コンパイル)。私は intel mac でそれを行っています。Matlab の R2010a (7.10.0.499) を使用しているので、C コードを 64 ビット用のバージョンにコンパイルしたいと思います。なんらかの理由で、-arch=maci64 オプションを指定して mex を実行しただけではうまくいかなかったようです...
回避策として、コマンド ラインで直接 C コードを mexmaci64 ファイルにコンパイルしています。mex による gcc 呼び出し (-v オプションをオン) を出発点として使用しました。C コードをオブジェクト ファイルにコンパイルできましたが、C コードを正しいアーキテクチャにコンパイルしていないようです。
C コードが 64 ビット Intel Mac にコンパイルされるように、以下の gcc 呼び出しを修正する方法を知っている人はいますか?
詳細を以下に示します。
いつものように、どんな助けも大歓迎です...
のどが渇いていなさい、友よ。:p
G
詳細:
コンパイルとリンクの方法は次のとおりです。
gcc -c -I/Applications/MATLAB_R2010a.app/extern/include -DMATLAB_MEX_FILE -fno-common -no-cpp-precomp -fexceptions -D MACVERSION -DMX_COMPAT_32 -O3 -DNDEBUG "BoxQP.c"
gcc -O -bundle -Wl,-flat_namespace -undefined suppress -Wl,-exported_symbols_list,/Applications/MATLAB_R2010a.app/extern/lib/maci64/mexFunction.map -o "BoxQP.mexmaci64" BoxQP.o -L/Applications/MATLAB_R2010a.app/bin/maci64 -lmx -lmex -lmat -lstdc++
ここに私が得る警告があります:
ld warning: in /Applications/MATLAB_R2010a.app/bin/maci64/libmx.dylib, file is not of required architecture
ld warning: in /Applications/MATLAB_R2010a.app/bin/maci64/libmex.dylib, file is not of required architecture
ld warning: in /Applications/MATLAB_R2010a.app/bin/maci64/libmat.dylib, file is not of required architecture
警告を無視して、matlab から BoxQP 関数を呼び出すと、次のエラー メッセージが表示されます。
??? Invalid MEX-file '/Users/gvrocha/Documents/academic/projects/splice/code/matlab/covsel/BoxQP.mexmaci64':
dlopen(/Users/gvrocha/Documents/academic/projects/splice/code/matlab/covsel/BoxQP.mexmaci64, 1): no suitable image found.
Did find: /Users/gvrocha/Documents/academic/projects/splice/code/matlab/covsel/BoxQP.mexmaci64: mach-o, but wrong architecture.
PS: -DMX_COMPAT_32 フラグを -DMX_COMPAT_64 に変更しようとしましたが、同じ警告と同じエラーが発生します...
PPS: Mac OS X 10.5.8 (「トロピカル」/プレーン バニラ Leopard、つまり、Snow Leopard ではない) を使用していることに言及することは適切かもしれません。
PPPS: MATLAB が提供する yprime.c の例でも同じことが起こります。