我正在尝试在Xcode(版本4.6.3)中构建一个MATLAB MEX文件以进行调试。我已经能够使用以下命令在MATLAB(R2013a)中成功编译程序:
>> mex src/main.c src/binomial.c src/gaussian1.c src/gaussianU.c src/poisson.c -Iinclude -I/usr/local/include -L/usr/local/lib -lmpfr -output cpdetect_c
当我尝试在Xcode中构建它时,程序编译成功,但构建在链接阶段失败,出现如下错误:
Undefined symbols for architecture x86_64:
"_mexErrMsgIdAndTxt", referenced from:
_mexFunction in main.o
"_mexPrintf", referenced from:
_find_gaussian1_change_point in gaussian1.o
_cpdetect in main.o
_find_poisson_change_point in poisson.o
"_mpfr_add", referenced from:
_find_gaussian1_change_point in gaussian1.o
_find_gaussianU_change_point in gaussianU.o
_find_poisson_change_point in poisson.o
"_mxCreateDoubleMatrix_730", referenced from:
_mexFunction in main.o
如this post中所述,我在Xcode中有以下设置:
>> Other Linker Flags: -lmx -lmex -lmat -lmpfr
>> Header Search Paths: $(MATLABROOT)/extern/include /Users/myName/Documents/MATLAB/SingleMolecule/Current_Version/cpdetect_c_mex/include /usr/local/include
>> Library Search Paths: $(MATLABROOT)/bin/maci64 /usr/local/lib
但这显然不足以成功连接。我错过了什么?
谢谢你的任何建议!
答案 0 :(得分:0)
经过一些研究和修补,我找到了解决方案。除了设置链接器标志,标题搜索路径和库搜索路径(在构建设置下),如我的初始帖子中所述,有必要告诉Xcode(第二次)链接库,如下所示:
1)选择“目标”并转到“构建阶段”。
2)如果您没有看到“带库的链接二进制”项,请转到编辑器>添加构建阶段菜单,然后选择“使用库构建阶段添加链接二进制文件”。
3)单击加号,然后选择需要链接的库。文件名的前缀为lib,扩展名为.dylib;例如,mpfr库是libmpfr.dylib。
希望这有助于某人!