gpt4 book ai didi

c - 将 mex 文件链接到静态 mpfr 库时出现问题

转载 作者:行者123 更新时间:2023-11-30 17:12:12 25 4
gpt4 key购买 nike

我正在尝试在 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 附带且默认在 MATLAB 中使用的 llvm-gcc-4.2 编译器的问题所致。因此,我尝试设置不同的编译器。我从 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 库),我将不胜感激。

最佳答案

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

MACOSX_DEPLOYMENT_TARGET='10.5'

这样:

MACOSX_DEPLOYMENT_TARGET='10.8'

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

关于c - 将 mex 文件链接到静态 mpfr 库时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31703899/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com