【问题标题】:MATLAB MEX can't find standard library with XCode 4.3 (Mac)MATLAB MEX 无法使用 XCode 4.3 (Mac) 找到标准库
【发布时间】:2012-04-08 09:36:34
【问题描述】:

我开始在我的 Mac(运行 OSX 10.7.3,Lion)上使用从 C 代码(使用 XCode 4.3)编译的 MATLAB(R2012a)的 MEX 文件。我已经安装了 MATLAB 提供的 XCode patch,它将 MATLAB 配置为在 XCode 4.2+ 下使用新的 llvm-gcc 编译器,但尝试使用 mex timestwo.c 编译示例文件时仍然出现以下错误:

/Applications/MATLAB_R2012a.app/extern/include/matrix.h:852:20: error: stdlib.h: No such file or directory
In file included from timestwo.c:1:
/Applications/MATLAB_R2012a.app/extern/include/mex.h:161:19: error: stdio.h: No such file or directory

编译然后中断

mex: compile of ' "timestwo.c"' failed.

Error using mex (line 206)
Unable to complete successfully.

很明显,编译器找不到标准库头目录,但是我需要更改什么才能成功编译?

【问题讨论】:

    标签: xcode matlab mex xcode4.3


    【解决方案1】:

    啊,找到了!

    MATLAB 提供的模板使用 /Developer/... 作为 SDK 位置,但这在 XCode4.3 下更改为位于 XCode.app 下。为了解决问题,我必须编辑我的~/.matlab/R2012a/mexopts.sh 文件以将 SDKROOT 目录设置为新位置。

    为此,请在 mexopts.sh 文件中搜索 SDKROOT 并将其更改为:

    SDKROOT='/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk/'
    

    注意,我在 Lion 上选择了 10.7 sdk b/c。如果您使用的是 Snow Leopard,请使用 10.6

    【讨论】:

    • 感谢您解决您的问题发布您的答案。它对我有用!
    • @Tim:关于您在leif's answer 中的编辑。如果您认为可以改进答案,请对其进行编辑,但在下面添加您的代码,这样就可以清楚地看出哪个答案/代码被接受了,以及建议的改进是什么。或者,您也可以添加自己的答案。
    • @ypercube:我添加了一条我在相同情况下收到的错误消息,以便其他人可以找到它。我没有 Matlab 代码,我试图在 OS X 10.7.5 上编译一个模块(SeDuMi)并得到了类似的错误。我不确定添加它是否可以澄清事情,这就是我将它添加到最初的问题中的原因。
    • @Tim:无论如何,那个编辑被拒绝了(我认为)。因此,请通过编辑或评论再试一次。我也会删除这些 cmets,Bryan,抱歉,讨论无关。
    【解决方案2】:

    我正在运行 Mac Mountain Lion 和 Matlab R2012b,以下解决方案对我有用:Matlab 2012a Mex to work with Xcode 4.5 on Mountain Lion

    准确地说, 我收到以下错误:

    error: stdio.h: No such file or directory

    error: stdlib.h: No such file or directory

    error: math.h: No such file or directory

    那么我做了什么来解决这个问题:

    我使用命令行工具安装了 Xcode,然后通过以下方式编辑了文件“/Applications/MATLAB_R2012b.app/bin/mexopts.sh”:

    将 CC 从 gcc-4.2 更改为 llvm-gcc-4.2

    将 CXX 从 gcc-4.2 更改为 llvm-g++-4.2

    将 SDKROOT 设置为“/”

    然后我在 MATLAB 中运行“mex -setup”,选择数字 1,并选择 y 覆盖旧的 /Users/insertyournamehere/.matlab/R2012b/mexopts.sh

    解决了:)

    【讨论】:

    • 您的答案不相同,因为发布答案的提问者尚未选择答案。那你能再写一遍吗?
    • 通过选择1,您将覆盖您之前所做的设置。所以实际上朗姆酒就足够了mex -setup
    【解决方案3】:

    你会在这里找到有价值的信息:http://www.mathworks.fr/support/solutions/en/data/1-FR6LXJ/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      相关资源
      最近更新 更多