Linux下高精度浮点计算库MPFR的编译

今天帮老师编译了一个C语言的库,这也是我第一次在Linux下编译文件,也遇到了一些问题,这里做一个记录。

1 介绍

  • 首先查看一下MPFR库到底是什么样的C语言库,下面是它的官网给出简介,可以知道MPFR是一个基于GMP库的高精度浮点计算库。

    The MPFR library is a C library for multiple-precision floating-point computations with correct rounding. MPFR has continuously been supported by the INRIA and the current main authors come from the Caramba and AriC project-teams at Loria (Nancy, France) and LIP (Lyon, France) respectively; see more on the credit page. MPFR is based on theGMP multiple-precision library.

    The main goal of MPFR is to provide a library for multiple-precision floating-point computation which is both efficient and has a well-defined semantics. It copies the good ideas from the ANSI/IEEE-754 standard for double-precision floating-point arithmetic (53-bit significand).

  • GMP的官网对它有下面的介绍,它用于任意精度算术,对有符号整数,有理数和浮点数进行操作。

    GMP is a free library for arbitrary precision arithmetic, operating on signed integers, rational numbers, and floating-point numbers. There is no practical limit to the precision except the ones implied by the available memory in the machine GMP runs on. GMP has a rich set of functions, and the functions have a regular interface.

  • 所以需要先编译GMP,然后再编译MPFR才可以。本文使用的系统是64位的Ubuntu 16.04,GMP版本是6.1.2, MPFR版本是4.0.2

2 GMP的编译

下载地址:https://gmplib.org/#DOWNLOAD

2.2 第一步

将压缩包解压缩,并进入文件夹,运行下面的命令进行编译前的配置工作。

1
./configure

最后的结果如下图所示。

gmp_configure

2.3 第二步

运行下面的命令,编译GMP,并创建一个库归档文件libgmp.a,在大多数平台上,也会生成动态库。

1
make

最后的结果如下图所示。

gmp_make

2.4 第三步

下面的命令将检查GMP是否被正确构建。

1
make check

不出意外的话可以看见一些如下图所示的信息。

gmp_make-check

2.5 第四步

下面的命令会将解压缩包的一些文件复制到/usr/local目录下的相应位置,完成安装工作。

1
make install

成功的话应该可以看到下面的信息。

gmp_make-install

打开/usr/local/include/usr/local/lib文件夹可以看到多了很多的文件。

gmp-h

gmp-lib

3 MPFR的编译

下载地址:https://www.mpfr.org/mpfr-current/#download

  • 同GMP的类似,运行的4条命令进行MPFR的编译和安装。

    ./configure --with-gmp-include=/usr/local/include --with-gmp-lib=/usr/local/lib

    make

    make check (这里产生少量报错的话可以忽视)

    make install

  • 最后结束时打开/usr/local/include/usr/local/lib文件夹可以看到又发生了下面的变化。

    mpfr-h

    mpfr-lib

4 测试并解决BUG

  • 这里使用MPFR官方给出的案例代码来进行测试,它们可以在解压缩包里的examples文件夹找到,本文选择了version.c文件进行测试。

    1
    cc -o version version.c -lmpfr -lgmp

    不幸的是,当运行生成文件查看结果时却得到了报错,信息如下。

    libmpfr.so.6: cannot open shared object file

    说明64位Ubuntu运行32位应用libmpfr.so.6无法被链接到。

  • 解决方案:

    • 首先安装一些必要的东西。

      1
      2
      apt-get install ia32-lib*
      apt-get install libmpfr4:i386
    • 接下来做文件间的链接,因为MPFR依赖于GMP,所以要进行两次。

      1
      2
      ln -s /usr/lib/i386-linux-gnu/libmpfr.so.6.0.2     /lib/libmpfr.so.6
      ln -s /usr/lib/i386-linux-gnu/libgmp.so.10.3.2 /lib/libgmp.so.10
  • 接下来重新查看结果,发现问题得到了解决,输出如下。

    version

至此,MPFR和GMP都被成功编译和安装,并通过了测试!

------------- 本文结束 感谢您的阅读 -------------

本文标题:Linux下高精度浮点计算库MPFR的编译

文章作者:Perry

发布时间:2019年06月12日 - 22:15

最后更新:2019年09月19日 - 13:47

原始链接:https://perry96.com/archives/8ae44ee3.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

0%