无法将mex文件链接到静态mpfr库

时间:2015-07-29 14:48:42

标签: c matlab gcc static-linking mex

我正在尝试使用Mac OS 10.8.5上的MATLAB R2013a编译需要mpfr C库的mex文件。我希望它在没有单独安装MPFR的系统上运行,所以我试图包含静态库:

mex my_program.c libmpfr.a

我将libmpfr.a库复制到包含源代码的文件夹中以简化操作。当我运行此命令时,我收到以下错误消息:

ld: targeted OS version does not support use of thread local variables in _mpfr_add for architecture x86_64

有一项研究表明,这个问题可能是由于Xcode附带的llvm-gcc-4.2编译器存在问题,默认情况下在MATLAB中使用。所以,我试着建立一个不同的编译器。我从MacPorts获得了GCC 4.7.4(MATLAB支持的最新版本),如下所述:http://www.ficksworkshop.com/blog/14-coding/65-installing-gcc-on-mac。接下来,我编辑了mexopts.sh文件,通过输入以下设置将MATLAB指向正确的编译器:

CC='/opt/local/bin/gcc-mp-4.7'
CXX='/opt/local/bin/g++-mp-4.7'

现在当我尝试编译时,我收到一条不同的错误消息:

In file included from /Applications/MATLAB_R2013a.app/extern/include/matrix.h:294:0,
             from /Applications/MATLAB_R2013a.app/extern/include/mex.h:58,
             from include/main.h:5,
             from include/poisson.h:7,
             from src/main.c:22:
/Applications/MATLAB_R2013a.app/extern/include/tmwtypes.h:61:21: fatal error: float.h: No such file or directory

如果,在mexopts.sh中,我另外设置

SDKROOT='/opt/local/'

或许多其他选择(基于我在系统上可以找到的float.h的不同副本的位置),我改为看

my_program.c:10:20: fatal error: stdlib.h: No such file or directory

因此,似乎GCC-MP-4.7无法找到所有标准C库。

我很感激解决这些问题中的任何一个(链接到静态mpfr使用默认编译器,或配置GCC 4.7以找到标准C库)。

1 个答案:

答案 0 :(得分:0)

我发现"线程局部变量"错误是由编译器尝试包含向后兼容性到OSX 10.5引起的。由于我不需要它来执行此操作,因此我编辑了mexopts.sh文件,替换此行

MACOSX_DEPLOYMENT_TARGET='10.5'

用这个:

MACOSX_DEPLOYMENT_TARGET='10.8'

这导致使用内置Xcode编译器成功编译mex文件。