Matlab mex 没有 xcode,但有独立的命令行工具

vin*_*nus 4 c matlab xcode compilation mex

我想在不安装 xcode 的情况下编译 mex 文件,仅使用命令行工具(来自苹果开发人员中心)。

Apple Command Line Tools 安装编译器,并将标准库和标头添加到系统中,其包大小比 xcode 小得多(几 GB)。

在 Linux 上运行 mex 是可能的 - 我认为 matlab mex 没有理由需要 macos 所需的庞大 SDK。一个漫长的夜晚的反复试验和黑客配置文件并没有帮助。有谁有一个关于如何在 matlab 之外编译 mex 文件的最小工作示例,或者有一个在不安装 xcode 的情况下使用 mex 的简单方法?

最好的问候,马格努斯

小智 7

好吧,我这里还有另一个选择:编辑下面的文件/Applications/MATLAB_R2016b.app/bin/maci64/mexopts(可能应该有3.xml文件,都需要相同的修改)。

找到该<XCODE_AGREED_VERSION>部分,注释整个 xml 标记,例如用<!--和包裹它们-->,如下所示:

<!--XCODE_AGREED_VERSION>
            <and diagnostic="Xcode is installed, but its license has not been accepted. Run Xcode and accept its license agreement." >
                <or>
                    <cmdReturns name="defaults read com.apple.dt.Xcode IDEXcodeVersionForAgreedToGMLicense"/>
                    <cmdReturns name="defaults read /Library/Preferences/com.apple.dt.Xcode IDEXcodeVersionForAgreedToGMLicense"/>
                </or>
                <cmdReturns name="&#10;agreed=$$ &#10; if echo $agreed | grep -E '[\.\&quot;]' >/dev/null; then &#10; lhs=`expr &quot;$agreed&quot; : '\([0-9]*\)[\.].*'` &#10;  rhs=`expr &quot;$agreed&quot; : '[0-9]*[\.]\(.*\)$'` &#10; if echo $rhs | grep -E '[\.&quot;]' >/dev/null; then &#10; rhs=`expr &quot;$rhs&quot; : '\([0-9]*\)[\.].*'` &#10; fi &#10; if [ $lhs -gt 4 ] || ( [ $lhs -eq 4 ] &amp;&amp; [ $rhs -ge 3 ] ); then &#10; echo $agreed &#10; else &#10; exit 1&#10; fi &#10; fi" />
            </and>
        </XCODE_AGREED_VERSION -->
Run Code Online (Sandbox Code Playgroud)

一些注意事项:

  1. 这些文件默认是只读的,你需要sudo chmod 644 *在该目录下发出

  2. 注释掉所有必要的文件后,在 matlab 中发出以下命令: mex -setup C++

然后你就完成了