我需要编译一段要从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 macs?
详情如下。
一如既往,任何帮助都非常感谢...
保持口渴,我的朋友们。 :P
详情:
以下是编辑和链接的方法:
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(“热带”/普通香草豹,即不是雪豹)。PPPS:MATLAB提供的yprime.c示例也是如此。