【发布时间】:2015-07-29 14:48:41
【问题描述】:
我正在尝试在 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 库)。
【问题讨论】:
标签: c matlab gcc static-linking mex