我正在尝试在 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
但这显然不足以成功链接。我错过了什么?
感谢您的任何建议!
最佳答案
经过更多研究和修补,我找到了解决方案。除了设置链接器标志、 header 搜索路径和库搜索路径(在“build设置”下)之外,如我的第一篇文章中所述,还需要告诉 Xcode(第二次)链接到库,如下所示:
1) 选择“目标”并转到“构建阶段”。
2) 如果您没有看到“将二进制文件与库链接”项,请转到“编辑器”>“添加构建阶段”菜单,然后选择“添加与库构建阶段的链接二进制文件”。
3) 单击加号并选择您需要链接的库。文件名具有前缀 lib 和扩展名 .dylib;例如,mpfr 库是 libmpfr.dylib。
希望这对某人有帮助!
关于c - 在 Xcode 中构建 C MEX 文件时链接库时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21257696/