Matlab2014添加对新版Xcode的mex编译支持(macOS High Sierra, Xcode 8.3)

Mac下matlab编译c代码找不到编译器解决办法。

前几天我自己作死把我的MacBook搞崩溃了,索性就重新装一次系统,这正好将两年多的系统垃圾清一清。

由于学习的需要,装好系统首先就得安装Xccode和Matlab,其中最近用到的一个代码需要matlab编译一段c写的代码,之前就用过所以很熟练的运行mex -setup命令,而并没有配置成功反而返回的是一个错误:MEX cannot find a supported compiler

matlab找不到编译器了。这也不难理解,我用的是matlab2014,而系统是2017年新出的High Sierra, 关键我还是用的测试beta版。Xcode也是新下载的最新版。谷歌百度查询了一些解决方法,在这里总结一下,一是给自己一个备份,说不定之后哪天还会用到,二是有人再遇到这样的情况也可以参考一下我的教程。

很简单,修改几个地方的内容就好了,文件在这里:/Applications/MATLAB_R2014b.app/bin/maci64/mexopts/下边的两个文件:clang_maci64.xml clang++_maci64.xml

进入这个文件夹可以用下边的步骤:

打开Finder左边导航栏的Applications,找到Matlab那个图标,右键有显示包的内容,这样就打开了matlab文件夹,然后再进入/bin/maci64/mexopts/就看到了这两个文件,双击或者用熟悉的编辑器打开,系统提示需要权限修改的时候点同意。

找到下边的代码块,其中高亮的是需要添加的内容

<ISYSROOT>
            <and>
                <cmdReturns name="xcode-select -print-path"/>
                <or>
                    <dirExists name="$$/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk" />
                    <dirExists name="$$/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk" />
                    <dirExists name="$$/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk" />
                    <dirExists name="$$/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk" />
                    <dirExists name="$$/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk" />
                    <cmdReturns name="find $$ -name MacOSX10.7.sdk" />
                    <cmdReturns name="find $$ -name MacOSX10.8.sdk" />
                    <cmdReturns name="find $$ -name MacOSX10.9.sdk" />
                    <cmdReturns name="find $$ -name MacOSX10.12.sdk" />
                    <cmdReturns name="find $$ -name MacOSX10.13.sdk" />
                </or>
            </and>
        </ISYSROOT>
        <SDKVER>
            <and>
                <and>
                    <cmdReturns name="xcode-select -print-path"/>
                    <or>
                        <dirExists name="$$/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk" />
                        <dirExists name="$$/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk" />
                        <dirExists name="$$/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk" />
                        <dirExists name="$$/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk" />
                        <dirExists name="$$/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk" />
                        <cmdReturns name="find $$ -name MacOSX10.7.sdk" />
                        <cmdReturns name="find $$ -name MacOSX10.8.sdk" />
                        <cmdReturns name="find $$ -name MacOSX10.9.sdk" />
                        <cmdReturns name="find $$ -name MacOSX10.12.sdk" />
                        <cmdReturns name="find $$ -name MacOSX10.13.sdk" />
                    </or>
                </and>
                <cmdReturns name="echo $$ | rev | cut -c1-10 | rev | egrep -oh '[0-9]+\.[0-9]+'" />
            </and>
        </SDKVER>

从中不难理解,添加的就是新版本的sdk接口值。可以直接修改原来的值或者复制一行,粘贴对应位置,再修改一下数字。我是保留了原来的数据,复制了一行然后添加在原来语句的下边。

两个文件都需要改,每个文件需要改4个地方所以一共是8处更改。

关键点一点,这个数字哪儿来的。

点击屏幕左上角那个苹果按钮,打开关于我的mac(about this mac)如下图:

里边的系统版本是 10.13 Beta。然后点击System Report

这里看到macOS的SDKs是10.12,我的理解在我这里应该添加的数字是10.12就可以了,因为我安装的是测试版系统,所以可能开发包还是旧版而系统比较超前已经是10.13了,我猜想如果是用正式版系统的普通用户的话这两个版本应该是一样的。我在我这儿将这两个数字都添加到了那两个文件中,你们可以看到就如上图那样。

这样就配置完成了。重启matlab然后运行mex -setup,看是不是返回如下信息。

MEX configured to use ‘Xcode with Clang’ for C language compilation.

恭喜你,你的matlab对于新版Xcode都支持已经添加完毕。

 

参考链接:

http://www.itwendao.com/article/detail/457717.html

https://de.mathworks.com/matlabcentral/answers/246507-why-can-t-mex-find-a-supported-compiler-in-matlab-r2015b-after-i-upgraded-to-xcode-7-0#answer_194526

Leave a Comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.