Mac 10.11.6 讓Matlab2014b 使用Xcode8.1進行mex編譯的方法

NO IMAGE

近日下載了libSVM,打算學習一下。

然鵝,我的matlab2014b在第一步就給我挖了個坑。。。由於我有升級APP的好習慣,Xcode早被我升級到了8.1版本,悲劇的是,matlab2014b顯然不可能認識這麼新的Xcode。

上網搜尋一番,從這個文章找到了思路。

http://blog.csdn.net/xia4o/article/details/50511629

原文給出了一個修改好的Xcode7的解決方案。仔細研究了一下,發現關鍵之處在於裡面的bin\maci64\mexopts\*.xml檔案中的內容。

Xcode8.1對應的Mac SDK版本是什麼呢?從Xcode.app裡面找吧。答案是10.12

所以把所有xml檔案中,

<ISYSROOT>
<and>
<cmdReturns name="xcode-select -print-path"/>
<or>
<dirExists name="$$/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk" />
<dirExists name="$$/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk" />
<dirExists name="$$/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk" />
<cmdReturns name="find $$ -name MacOSX10.10.sdk" />
<cmdReturns name="find $$ -name MacOSX10.11.sdk" />
<cmdReturns name="find $$ -name MacOSX10.12.sdk" />
</or>
</and>
</ISYSROOT>

以及

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

裡面,依葫蘆畫瓢,增加一行關於10.12的就好。

注意,是所有在mexopts目錄下的xml檔案都要改。

弄好之後,重啟matlab,輸入命令

mex -setup

好了,現在可以愉快的編譯libsvm了。

友情提醒,如果各位按照我的方法做,千萬記得先給原來的mexopts目錄整體備份一下,以防萬一。本人只是自己測試通過,不對此方法可能造成的未知問題負責。

Use at your own risk。