2

我需要编译一段要从 matlab 调用的 C 代码(mex 编译)。我在 intel mac 上这样做,因为我使用的是 Matlab 的 R2010a (7.10.0.499),所以我想将 C 代码编译成 64 位版本。无论出于何种原因,仅使用 -arch=maci64 选项进行 mex 似乎不起作用......

作为一种解决方法,我直接在命令行上将 C 代码编译为 mexmaci64 文件。我使用 mex 发出的 gcc 调用(打开 -v 选项)作为起点。我设法将 C 代码编译为目标文件,但看起来我没有将 C 代码编译为正确的体系结构。

有谁知道如何更正下面的 gcc 调用,以便将 C 代码编译为 64 位 intel mac?

详情如下。

与往常一样,非常感谢任何帮助...

保持口渴,我的朋友们。: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(“热带”/plain-vanilla Leopard,即不是雪豹)可能是相关的。

PPPS:MATLAB 提供的 yprime.c 示例也是如此

4

0 回答 0