在Xcode中构建C MEX文件时无法链接库

时间:2014-01-21 12:06:37

标签: c xcode matlab linker mex

我正在尝试在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

但这显然不足以成功连接。我错过了什么?
谢谢你的任何建议!

1 个答案:

答案 0 :(得分:0)

经过一些研究和修补,我找到了解决方案。除了设置链接器标志,标题搜索路径和库搜索路径(在构建设置下),如我的初始帖子中所述,有必要告诉Xcode(第二次)链接库,如下所示:

1)选择“目标”并转到“构建阶段”。

2)如果您没有看到“带库的链接二进制”项,请转到编辑器>添加构建阶段菜单,然后选择“使用库构建阶段添加链接二进制文件”。

3)单击加号,然后选择需要链接的库。文件名的前缀为lib,扩展名为.dylib;例如,mpfr库是libmpfr.dylib。

希望这有助于某人!