CentOS7.5+gcc7编译GMP、MPFR和SuiteSparse
GMP
从
官网
下载最新源码压缩包,进入压缩包所在目录,然后在终端运行下面几步指令:
- lzip -d gmp-x.x.x.tar.lz
- tar -xvf gmp-x.x.x.tar
- cd gmp-x.x.x
- ./configure –prefix=your_libpath/gmp_lib
- make
- make check
-
make install
其中第一步的lzip是一个解压工具,如果提示不存在则联网安装即可;
tar.lz是打包后压缩的格式,所以需要第一步的解压,第二部才能解包。
第四步可以选择性使用–prefix=PATH参数配置你想把GMP安装到哪里,默认是/usr/local,因而一般需要sudo;
MPFR
从
官网最新下载页面
下载最新源码压缩包,
将
补丁页面
文本内容保存到一个文件allpatches.txt;
进入压缩包所在目录,然后在终端运行下面几步指令:
- unzip mpfr-4.1.0.zip
- cd mpfr-4.1.0
- patch -N -Z -p1 < allpatches.txt
-
./configure --prefix=your_libpath/mpfr_lib --with-gmp-build=GMPBUILD
,GMPBUILD是gmp的编译目录,需要有
gmp_impl.h
。 -
make
-
make check
-
make install
更具体的编译说明请参考解压后的
INSTALL
文件。
SuiteSparse
下载源码。我没有Matlab,因此使用Makefile进行编译。
SuiteSparse依赖众多数值计算库。其源码下载和编译均可参考
GitHub页面
,若想了解更多可以访问
官网
。
编译和安装的命令为:
make
make install
默认的安装路径为,
SuiteSparse/include
和
SuiteSparse/lib
,文档被拷贝到
SuiteSparse/doc
路径下。
当然,系统自带的gflags和mpfr等库的版本较旧,Makefile自动找到的头文件和库不符合需求,需要修改Makefile再进行编译。
要完成这个目的,我们要分两步:
- 找到SuiteSparse的哪个子模块依赖了这些库
-
修改该子模块的Makefile中这些库的路径
例如,
SLIP_LU
模块中引用了我们自行编译的
mpfr
模块,却仍会搜索到系统自带的旧版本,于是打开
SLIP_LU/Lib
下的
Makefile
作下图所示的修改:
然后把我们自己编译的高版本mpfr的共享库全部拷贝到
SuiteSparse/lib
路径下,即可被链接。或者在
Makefile
中添加
LDFLAGS = -L../../lib
指定库搜索路径。(LDFLAGS即链接器选项 -L -I)
-Isome_path
即将
some_path
作为优先于
/usr/include
搜索头文件的路径,可以满足我们指定依赖库的需求。
-Lsome_lib_path
选项将
some_lib_path
作为优先于系统
/usr/local/lib64
搜索库的路径,可以让链接器到我们指定的路径下去查找共享库。
-Wl,-rpath
-Wl,-rpath-link
如果提示缺少其他符号定义,即可能是链接的库不对,或者少链接了库。将需要链接的库拷贝到
SuiteSparse/lib
下即可。