跳转至内容

SPM/在 SunOS 上安装

来自维基教科书,自由的教科书,为一个开放的世界
< SPM

SPM8, SPM12

[编辑 | 编辑源代码]

由于 MathWorks 不再支持这些平台,因此没有计划为 Solaris SPARC(32 位或 64 位)提供 SPM8 或 SPM12 MEX 文件,请参阅 MATLAB 路线图

最新更新中提供了适用于 Solaris SPARC 的预编译 MEX 文件(*.mexsol 和 *.mexs64)。

在您的主目录中下载 spm5.zip,然后在终端中键入以下内容:

cd /home/login
unzip spm5.zip

启动 MATLAB 并将 SPM 添加到您的路径中,可以使用“文件 > 设置路径 > 添加文件夹...”或在 MATLAB 的工作区中键入以下内容:

addpath /home/login/spm5

在终端中,从 SPM5 安装目录的“src”文件夹中键入以下内容:

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

以下是关于如何在运行 Solaris 9 的 SUN 上安装了 gcc 编译器的机器上,将 SPM2 编译为与 MATLAB 7(服务包 1)完美运行的说明。与 SPM2 附带的标准 Makefile 不完全一致;部分原因是它期望您使用 Solaris 附带的 cc 编译器。

设置 MATLAB7 的编译

[编辑 | 编辑源代码]

将“gccopts.sh”文件从 $MATLAB_HOME_DIR/bin 复制到 SPM2 目录,并将其命名为“mexopts.sh”。这使您可以轻松地输入仅用于编译 SPM2 的 mex 选项。在下面,您将更改 Makefile,告诉它使用此 mexopts.sh 文件而不是默认文件。确保此文件设置诸如 CC='gcc' 之类的变量。您可能还需要编辑 MLIBS 行为:

 MLIBS="-L/opt/sfw/gcc-3/lib -L/opt/sfw/gcc-3/lib/gcc-lib -L$TMW_ROOT/bin/$Arch -lg2c -lmx -lmex -lmat -lm"

(引号之间的所有内容应在一行上) 注意,搜索库的额外目录和“-lg2c”选项是新增的。为确保安全,还可以尝试添加:

 EXTRA_LIBDIR="/opt/sfw/gcc-3/lib"

更改优化标志也可以提高性能。对于 UltraSPARCIII cpu,您可以尝试以下操作:

 COPTIMFLAGS='-O3 -funroll-loops -mcpu=v9 -DNDEBUG -DBIGENDIAN'

正确设置链接器需要一些搜索;尝试在 mexopts.sh 文件中添加以下内容:

 LDFLAGS="-shared -Wl,-M,$TMW_ROOT/extern/lib/$Arch/$MAPFILE,-R,$GCC_LIBDIR,-R,$EXTRA_LIBDIR"

编辑 Makefile

[编辑 | 编辑源代码]

尝试将 Makefile 从以下内容:

SunOS:
       make all SUF=mexsol  CC="cc -xO5" MEX="mex COPTIMFLAGS=-xO5"

更改为以下内容:

SunOS:
       make all SUF=mexsol  CC="cc -xO5 -DBIGENDIAN" MEX="mex COPTIMFLAGS=-xO5 -DBIGENDIAN"
SunOS.gcc:
# Assumes that gccopts.sh has been copied to mexopts.sh in the current directory
       make all SUF=mexsol  CC="gcc -O3 -funroll-loops -DBIGENDIAN -fPIC"\
               MEX="mex -f ./mexopts.sh"

同样,您也可以尝试在 UltraSPARCIII cpu 的 CC 变量中添加“-mcpu=v9”作为选项。您可能还需要编辑以下行:

all: verb.$(SUF) $(SPMMEX)

更改为以下内容:

all: verb.$(SUF) archive $(SPMMEX)

因为这会重新编译 spm_vol_utils.a 存档,否则该存档可能与您新编译的 mexsol 例程不兼容。

然后使用以下命令编译:

   make SunOS.gcc

您可能需要执行以下操作:

   make very_clean

才能使其正常工作。如果不执行此操作,在链接时可能会出现大量错误。

为了找出问题所在,您可以将上面的行从以下内容:

MEX="mex -f ./mexopts.sh"

更改为以下内容:

MEX="mex -n -f ./mexopts.sh"

这不会编译 SPM 例程,但会告诉您 mex 将对 gcc 执行哪些命令。

华夏公益教科书