跳转到内容

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 平台的列表。

华夏公益教科书