【问题标题】:Trouble linking a mex file to static mpfr library将 mex 文件链接到静态 mpfr 库时出现问题
【发布时间】: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


    【解决方案1】:

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

    MACOSX_DEPLOYMENT_TARGET='10.5'
    

    用这个:

    MACOSX_DEPLOYMENT_TARGET='10.8'
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-29
      • 1970-01-01
      • 2018-12-11
      • 1970-01-01
      • 2011-09-17
      • 2021-04-25
      相关资源
      最近更新 更多