CentOS7.5+gcc7编译GMP、MPFR和SuiteSparse

  • Post author:
  • Post category:其他




CentOS7.5+gcc7编译GMP、MPFR和SuiteSparse



GMP



官网

下载最新源码压缩包,进入压缩包所在目录,然后在终端运行下面几步指令:

  1. lzip -d gmp-x.x.x.tar.lz
  2. tar -xvf gmp-x.x.x.tar
  3. cd gmp-x.x.x
  4. ./configure –prefix=your_libpath/gmp_lib
  5. make
  6. make check
  7. make install

    其中第一步的lzip是一个解压工具,如果提示不存在则联网安装即可;

    tar.lz是打包后压缩的格式,所以需要第一步的解压,第二部才能解包。

    第四步可以选择性使用–prefix=PATH参数配置你想把GMP安装到哪里,默认是/usr/local,因而一般需要sudo;



MPFR



官网最新下载页面

下载最新源码压缩包,



补丁页面

文本内容保存到一个文件allpatches.txt;

进入压缩包所在目录,然后在终端运行下面几步指令:

  1. unzip mpfr-4.1.0.zip
  2. cd mpfr-4.1.0
  3. patch -N -Z -p1 < allpatches.txt

  4. ./configure --prefix=your_libpath/mpfr_lib --with-gmp-build=GMPBUILD

    ,GMPBUILD是gmp的编译目录,需要有

    gmp_impl.h


  5. make

  6. make check

  7. make install

更具体的编译说明请参考解压后的

INSTALL

文件。



SuiteSparse

下载源码。我没有Matlab,因此使用Makefile进行编译。

SuiteSparse依赖众多数值计算库。其源码下载和编译均可参考

GitHub页面

,若想了解更多可以访问

官网



编译和安装的命令为:

make
make install

默认的安装路径为,

SuiteSparse/include



SuiteSparse/lib

,文档被拷贝到

SuiteSparse/doc

路径下。

当然,系统自带的gflags和mpfr等库的版本较旧,Makefile自动找到的头文件和库不符合需求,需要修改Makefile再进行编译。

要完成这个目的,我们要分两步:

  1. 找到SuiteSparse的哪个子模块依赖了这些库
  2. 修改该子模块的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

下即可。



版权声明:本文为qq_42679415原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。