2

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 の例でも同じことが起こります。

4

0 に答える 0