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

Matlab mex没有xcode,但有独立的命令行工具,c,xcode,matlab,compilation,mex,C,Xcode,Matlab,Compilation,Mex,我想编译mex文件而不安装xcode,只使用命令行工具(来自apple developer center) Apple命令行工具安装编译器,并在一个比xcode(几GB)小得多的包中向系统添加标准库和头 在linux上运行mex是可能的——我看不出MatlabMEX为什么需要macos所需的巨大SDK。经过一个漫长的晚上的反复试验和对配置文件的黑客攻击并没有起到任何作用。有没有人有一个在matlab之外编译mex文件的最简单的工作示例,或者一个不用安装xcode就可以使用mex的简单方法 向你致

我想编译mex文件而不安装xcode,只使用命令行工具(来自apple developer center)

Apple命令行工具安装编译器,并在一个比xcode(几GB)小得多的包中向系统添加标准库和头

在linux上运行mex是可能的——我看不出MatlabMEX为什么需要macos所需的巨大SDK。经过一个漫长的晚上的反复试验和对配置文件的黑客攻击并没有起到任何作用。有没有人有一个在matlab之外编译mex文件的最简单的工作示例,或者一个不用安装xcode就可以使用mex的简单方法


向你致意,马格纳斯。在花了更多的时间之后,我学到了更多的东西,并回答了我自己的问题。如果将来有人需要我的解决方案,我会把它贴在这里

确保电源线已连接到您的计算机,并且已安装MATLAB,还应安装apple的命令行工具。然后调用以下makefile从终端编译arrayProduct.c(随matlab提供),如下所示:

make mex=arrayProduct
将此makefile代码放在名为makefile的文件中的同一文件夹中(如果必须,请根据自己的需要进行编辑):

上面的makefile是一个简单的工作示例,您应该编辑它以符合您的要求

编辑: 选项2 通过编辑包含编译器选项的xml文件,可以让MATLAB了解如何使用命令行工具。打开位于的文件 /User/username/Library/Application Support/MathWorks/MATLAB/r2016 b/mex_C_maci64.xml


删除与ISYSROOT相关的所有编译器和链接器选项。这将使编译器在/usr/include等中搜索头文件,而不是在XCode中的SDK文件夹中

嗯,我在这里有另一个选择: 编辑
/Applications/MATLAB_r2016 b.app/bin/maci64/mexopts
下的文件(可能应该有3.xml文件,所有文件都需要相同的修改)

找到
部分,对整个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 -->

一些注意事项:

  • 默认情况下,这些文件是只读的,您需要发出
    sudo chmod
    644*
    在该目录中

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


  • 然后您就完成了

    我认为您可以从自制软件安装gcc,基本上使用与linux相同的编译器。我的机器上有这两个,我可以稍后检查matlab是否能看到这两个。实际上我不认为mac上支持gcc,我只能使用xcode,对不起。无论如何,谢谢!正如你在下面看到的,我自己找到了解决办法。我碰巧在这个话题上遇到了麻烦。我没有试过,但可能会很有趣。谢谢!然而,就目前而言,下面我自己的解决方案中的选项2工作得非常好!谢谢,解决方案(选项2)在我的机器上运行。您可能不想使用
    MX\u COMPAT\u 32
    ,除非您的MEX文件源代码非常旧,并且使用
    int
    而不是
    mwSize
    等。有关在编译过程中定义哪些宏的更多信息,请参阅。在花了几个小时试图解决这个问题之后,我想对您的解决方案表示感谢。
    <!--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 -->