跳轉到內容

SPM/在 64 位 Linux 上安裝

來自華夏公益教科書
< SPM

所有版本的 SPM 都支援 Linux 64 位系統,安裝過程在各個版本中應該大致相同。如果 SPM 發行版提供的 SPM MEX 檔案 (*.mexa64) 不相容您的系統,您可能需要重新編譯它們。

spm12.zip 及其更新 spm12_updates_rxxxx.zip 下載到您的主目錄,然後在終端中輸入以下命令:

cd /home/login
unzip spm12.zip
unzip -o spm12_updates_rxxxx.zip -d spm12

啟動 MATLAB 並將 SPM 新增到您的路徑中,可以使用 檔案 > 設定路徑 > 新增資料夾... 或在 MATLAB 工作區中輸入以下命令:

addpath /home/login/spm12

在終端中,從 SPM12 安裝目錄的 src 資料夾中,輸入以下命令:

cd /home/login/spm12/src
make distclean
make && make install
make external-distclean
make external && make external-install

spm8.zip 及其更新 spm8_updates_rxxxx.zip 下載到您的主目錄,然後在終端中輸入以下命令:

cd /home/login
unzip spm8.zip
unzip -o spm8_updates_rxxxx.zip -d spm8

啟動 MATLAB 並將 SPM 新增到您的路徑中,可以使用 檔案 > 設定路徑 > 新增資料夾... 或在 MATLAB 工作區中輸入以下命令:

addpath /home/login/spm8

在終端中,從 SPM8 安裝目錄的 src 資料夾中,輸入以下命令:

cd /home/login/spm8/src
make distclean
make && make install
make toolbox-distclean
make toolbox && make toolbox-install
make external-distclean
make external && make external-install

所需的開發包:make、gcc。

如果您遇到有關 "ft_getopt" 的錯誤訊息,請下載 SPM8 的維護版本 並完全跳過上面的編譯步驟。所有必要的檔案,包括 windows、linux 和 mac 的 mex 檔案,都應該已經編譯完成。但是,此發行版在編譯時會針對 nanmean.c 出現錯誤。(參考:https://www.jiscmail.ac.uk/cgi-bin/webadmin?A2=spm;9d67787a.1802)

spm5.zip 及其更新的 MEX 檔案 SPM5_Matlab7.9_LINUX64_MEX.zip 下載到您的主目錄,然後在終端中輸入以下命令:

cd /home/login
unzip spm5.zip
unzip -o SPM5_Matlab7.9_LINUX64_MEX.zip -d spm5

啟動 MATLAB 並將 SPM 新增到您的路徑中,可以使用 檔案 > 設定路徑 > 新增資料夾... 或在 MATLAB 工作區中輸入以下命令:

addpath /home/login/spm5

在終端中,從 SPM5 安裝目錄的 src 資料夾中,輸入以下命令:

cd /home/login/spm5/src
make distclean
make && make install

如果您收到以下錯誤訊息:mex: link of ' "spm_bwlabel.mexa64"' failed,請編輯 spm_bwlabel.c 第 364 行,使其改為以下內容:

   plhs[1] = mxCreateDoubleScalar(nl);

參考:McGeown, William. "Re: mex files SPM5 64bit," JISCMail. 13 Apr 2015. Last Accessed 18 Sep 2018.

spm2.tar.gz 及其更新的 MEX 檔案 SPM2_LINUX64_MEX.tar.gz 下載到您的主目錄,然後在終端中輸入以下命令:

cd /home/login
tar xvfz spm2.tar.gz
tar xvfz SPM2_LINUX64_MEX.tar.gz -C spm2

啟動 MATLAB 並將 SPM 新增到您的路徑中,可以使用 檔案 > 設定路徑 > 新增資料夾... 或在 MATLAB 工作區中輸入以下命令:

addpath /Users/login/spm2

在終端中,輸入以下命令:

cd /home/login/spm2
make clean.Linux.A64
make Linux.A64

故障排除

[編輯 | 編輯原始碼]

"bad image handle dimensions" 錯誤

[編輯 | 編輯原始碼]

嘗試顯示影像時出現的 "bad image handle dimensions" 錯誤表示您需要(重新)編譯 SPM MEX 檔案。

"cannot find -lstdc++" 錯誤

[編輯 | 編輯原始碼]

如果您收到錯誤訊息“找不到 -lstdc++”,請嘗試使用您的包管理器安裝 build-essential 包(例如,在 Ubuntu 上使用 sudo apt-get install build-essential),或者使用 sudo apt-get install libstdc++5 安裝特定的 libstdc++5 包(將 5 替換為您的系統版本)。

如果在安裝 libstdc++5 後,lstdc++ 錯誤仍然存在,只需使用以下命令新增符號連結:

sudo ln -s /usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so 

它應該可以工作。如果不是,請參閱下一步。

對於舊版本的 Ubuntu 和 MATLAB,請檢視 這些說明

lstdc++ 的其他問題

[編輯 | 編輯原始碼]

如果您遇到上述錯誤並且無法安裝 libstdc++(例如,您沒有 root/管理員訪問許可權),或者您遇到其他問題,例如“ ... 版本 `GCC_4.2.0' 未找到(/usr/lib64/libstdc++.so.6 需要)”,則另一種選擇是編輯您的 mexopts.sh 配置檔案並刪除或停用 -lstdc++ 編譯器標誌,例如,只需使用查詢和替換刪除所有 -lstdc++ 的例項。 SPM 將在沒有它的情況下正確編譯。

最好編輯 mexopts.sh 的本地副本(原始副本位於您的 matlab 和 mex 可執行檔案的 bin 目錄中)。如果您執行 mex -setup,它將互動式地為您建立一個副本,例如在 ~/.matlab/RELEASE

~/.matlab/R14SP3/mexopts.sh
~/.matlab/R2008b/mexopts.sh

或者類似的,您之後可以在需要時進一步編輯該副本。如果您匹配發布版本,mex 將找到您的 mexopts.sh 副本。請注意,從 MATLAB

version

應顯示您的釋出版本,但帶有括號,例如“ (R14SP3)”。

"mex: command not found" 錯誤

[編輯 | 編輯原始碼]

如果您收到錯誤“mex: command not found”,請檢查 mex 是否在您的路徑中。將 MATLAB 二進位制目錄(通常為 /usr/local/matlab/bin)新增到您的路徑或建立指向路徑中已存在位置(通常為 /usr/local/bin)的 mex 的連結。

  • 新增路徑
    • 鍵入:PATH=/usr/local/matlab/bin:$PATH
  • 建立連結
    • 進入您的本地二進位制目錄:cd /usr/local/bin
    • 建立連結:ln -s /usr/local/matlab/bin/mex
    • (注意:在 /usr/local/bin 中建立連結需要 root 許可權)。

另一個解決方案是編輯 Makefile(對於 SPM8 為 spm8/src/Makefile.var,對於 SPM5 為 spm5/src/Makefile)並在引用 MEXBIN 時提及完整路徑

MEXBIN = /usr/local/matlab/mex

"This is pdfTeX, Version ... (TeX Live 2011)" 錯誤

[編輯 | 編輯原始碼]

如果您遇到錯誤

mex: unrecognized option `-O'
mex: unrecognized option `-c'
This is pdfTeX, Version ... (TeX Live 2011)

這是由於 MATLAB mex 和 LaTeX 命令(來自 texlive 包)之間存在名稱衝突。更改路徑或 MEXBIN,如上一個解決方案中所述。

缺少檔案

[編輯 | 編輯原始碼]

如果您遇到構建錯誤,例如在嘗試執行命令“make && make install”時 math.h 不存在,那麼您可能需要安裝 build-essentials 包。在命令列中鍵入:“sudo aptitude install build-essential”(對於 Ubuntu)。如果您具有 sudo 許可權,或者只需以 root 使用者身份登入或獲得超級使用者身份並鍵入:“aptitude install build-essential”。

"plugin needed to handle lto object" 錯誤

[編輯 | 編輯原始碼]

在定義 AR 的行中編輯 spm12/src/Makefile.var,使其讀取

AR           = gcc-ar rcs

啟動時崩潰

[編輯 | 編輯原始碼]

以下內容涉及 MATLAB 在開啟 SPM 介面時出現段錯誤的情況,並出現類似於“'BadWindow (invalid Window parameter)'”,“serial 20133 error_code 3 request_code 20 minor_code 0”,“Pango-CRITICAL **: pango_font_description_from_string: assertion 'str != NULL' failed”,“GLib-CRITICAL **: g_once_init_leave: assertion 'result != 0' failed”,“GLib-GObject-CRITICAL **: g_type_register_dynamic: assertion 'parent_type > 0' failed” 的錯誤

這可能是圖形視窗中歡迎訊息作為網頁文件顯示時出現的問題。

一個解決方案是在 spm.m 中註釋掉一行:https://github.com/spm/spm12/blob/r7771/spm.m#L352

另一個無需修改 SPM 原始碼的解決方案是定義一個環境變數,請參閱:https://github.com/spm/spm12/blob/r7771/spm_browser.m#L54

setenv('SPM_HTML_BROWSER','0')

SPM2 的編譯說明

[編輯 | 編輯原始碼]

Makefile 的更新

[編輯 | 編輯原始碼]

為了使重新編譯過程正常工作,需要修補 spm2.tar.gz 包中提供的 Makefile。此外,檔案 spm_platform.m 需要更新。

更新後的 Makefile 添加了一個新的架構,Linux.a64

Linux.a64:
make all SUF=mexa64 CC="gcc -O3 -funroll-loops -fPIC -march=x86-64" \
MEX="mex COPTIMFLAGS='-O3 -funroll-loops -fPIC -march=x86-64'"

以及 cleanverb.mexa64 的相應部分。

-fPIC 選項對於允許在 64 位 Linux 上鍊接是必要的。
-march=x86-64Opteron64 位 Xeon 提供通用最佳化。如果程式碼在 64 位 Xeon 上執行,您可以將其更改為 -march=nocona(支援 EM64T 的第一個修訂版 Xeon 處理器的代號為 nocona),如果您有 OpteronAthlon64,請將其更改為 -march=opteron。這可能會讓您獲得額外的效能提升。

spm_platform.m 的更新

[編輯 | 編輯原始碼]

64 位 Linux 的 Matlab 在執行 32 位 Matlab 時會將自身識別為 GLNXA64,而不是 GLNX86位元組序 不會改變,因此我在 PDefs 單元格列表中添加了它

                'GLNXA64',      'unx',  0;...

並將 GLNXA64 新增到字型配置中其他 Unix 平臺的列表。

華夏公益教科書