最近需要利用 svm 來處理一些東西。用到了臺灣大學林智仁(Lin Chih-Jen)教授團隊開發(fā)設計 libsvm 軟件包。在把 libsvm 安裝到 Matlab 上的時候浪費了差不多一個小時。而且絕大多數(shù)網(wǎng)上給的教程在我這里都沒有什么卵用,所以就把這個安裝步驟記錄下來。
環(huán)境
- 操作系統(tǒng):macOS sierra 10.12.2
- Matlab 版本:R2015b
- Xcode 版本:8.2.1 (8C1002)
步驟
1. Command Line Tool
如果你沒有安裝 Xcode,那么你最好還是安裝一個,在 App Store 上搜索安裝就行。(mac 上竟然不裝 Xcode?那你要 mac 何用?),如果你很久沒有更新 Xcode 了,建議你先更新一下,因為早期的 Xcode 沒有包含 Command Line Tool。總之你打開 Xcode 新建一個項目的時候,能看見下圖中紅色框中的 Command Line Tool 的圖標就行了。

據(jù)網(wǎng)上的一些文章說,如果你沒有安裝 Xcode,可以使用 xcode-select --install 這個命令來安裝,但我沒試過。
2. mex -setup
打開 Matlab,在命令行輸入mex -setup,此時會報錯。如果沒報錯的話,你就可以跳過這一步。

這個錯誤說沒有找到支持的編譯器和 sdk,于是我們的解決方法就是讓 Matlab 找到這些東西。
打開文件夾
/Applications/MATLAB_R2015b.app/bin/maci64/mexopts ,找到下面這兩個文件:
- clang++_maci64.xml
- clang_maci64.xml
按 command + f 尋找字符串 MacOSX10.10.sdk 或 MacOSX10.11.sdk,找到后把他們都改成 MacOSX10.12.sdk。每一個文件需要更改 4 處。
OK,改好后再在 Matlab 的命令行輸入mex -setup,如果出現(xiàn)類似于下面的信息,就說明可以了。如果還報錯,請參考 這篇文章 給 Matlab 打一個補丁。一般來說是不需要這個補丁的,反正我是沒有打。

3. 編譯 libsvm
在 github 上把 libsvm 下載下來,進入 matlab 文件夾,打開 Makefile 文件,把 MATLABDIR 的值改成你自己的 MATLAB 的安裝位置,例如我的就改成:MATLABDIR ?= /Applications/MATLAB_R2015b.app。
注意到這個 Makefile 文件里面第 4 和 第 5 行有一個注釋。說什么 for Mac MATLABDIR ?= /opt/local/matlab,不要理會它。

好了,把 MATLABDIR 更改好之后,打開命令行,輸入 make 命令。然后 balabala 輸出一堆 warning,但沒有 error。編譯完成后生成了幾個以 .mexmaci64 為后綴的文件,在 Matlab 的 set path 中把 這些 .mexmaci64 文件添加到路徑中就ok了。
4. 測試
在Matlab的命令行里輸入 libsvmread ,會出現(xiàn)Usage: [label_vector, instance_matrix] = libsvmread('filename'); 的提示,此時說明已經(jīng)能夠在 Matlab 里面使用 libsvm 了。
