SPM/在 64 位 Linux 上安装
SPM 维基教科书已迁移至 https://www.fil.ion.ucl.ac.uk/spm/docs/ |
所有版本的 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" 错误表示您需要(重新)编译 SPM MEX 文件。
如果您收到错误消息“找不到 -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,请查看 这些说明。
如果您遇到上述错误并且无法安装 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 是否在您的路径中。将 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
如果您遇到错误
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”。
在定义 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.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'"
以及 clean 和 verb.mexa64 的相应部分。
-fPIC 选项对于允许在 64 位 Linux 上链接是必要的。
-march=x86-64 为 Opteron 和 64 位 Xeon 提供通用优化。如果代码在 64 位 Xeon 上运行,您可以将其更改为 -march=nocona(支持 EM64T 的第一个修订版 Xeon 处理器的代号为 nocona),如果您有 Opteron 或 Athlon64,请将其更改为 -march=opteron。这可能会让您获得额外的性能提升。
64 位 Linux 的 Matlab 在运行 32 位 Matlab 时会将自身识别为 GLNXA64,而不是 GLNX86。字节序 不会改变,因此我在 PDefs 单元格列表中添加了它
'GLNXA64', 'unx', 0;...
并将 GLNXA64 添加到字体配置中其他 Unix 平台的列表。