c - 在 Xcode 中构建 C MEX 文件时链接库时出现问题

标签 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

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

最佳答案

经过更多研究和修补,我找到了解决方案。除了设置链接器标志、 header 搜索路径和库搜索路径(在“build设置”下)之外,如我的第一篇文章中所述,还需要告诉 Xcode(第二次)链接到库,如下所示:

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

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

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

希望这对某人有帮助!

关于c - 在 Xcode 中构建 C MEX 文件时链接库时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21257696/

相关文章:

matlab - 如何使用matlab与uci协议(protocol)进行通信

matlab - 为什么我收到错误 "Index exceeds matrix dimensions"?

c - 如何向从 shell 脚本启动的所有进程发送 SIGSTOP

谁能告诉我为什么这个程序会运行?

xcode - 加载 View 导致程序崩溃

swift - 无法推断通用参数 "T"

c - 为什么这个带有指针的 for 循环不会去任何地方?

c++ - 如何将 int 复制到 u_char*

ios - Xcode 单元测试返回没有 'private keyword' 的临时文件夹的 NSURL

MATLAB Function 模块输出作为虚拟总线