交叉编译 mpfr
1 概述
MPFR(Multiple Precision Floating-Point Reliable)是一个用于高精度浮点数计算的开源库,它提供了高精度的浮点数运算和函数库,适用于需要处理大数或高精度数值计算的场景。广泛应用于科学计算、金融计算、数据加密、密码学等领域,如数值模拟、数据分析、物理计算、利率计算、风险评估以及加密算法中的高精度计算等。提供了丰富的数学函数库,包括基本的算术运算、三角函数、对数函数、指数函数等,方便用户进行各种数学计算。
官方网址: https://www.mpfr.org/
MPFR 基于 GMP 库,需要先交叉编译了 GMP 库(参考「交叉编译 gmp」)之后再对 MPFR 库进行编译。不然,在调用 ./configure
指令时会报以下错误:
checking for gmp.h... no
configure: error: gmp.h can't be found, or is unusable.
2 源码下载
在官方网址点击 download 链接进入下载页面,选择「mpfr-4.2.1.tar.xz」下载或者使用 wget
命令直接下载:
wget https://www.mpfr.org/mpfr-current/mpfr-4.2.1.tar.xz
MPFR 的源码使用 gitlab 进行托管,在「MPFR - Git Repository」中有详细的介绍,使用以下指令进行克隆。
git clone https://gitlab.inria.fr/mpfr/mpfr.git
可以在 https://ftp.gnu.org/gnu/mpfr/ 路径下查找 MPFR 的其他版本。
3 交叉编译
解压缩源码包,如果使用 git clone
下载回来的源码可以忽略这一步。
tar -xvf mpfr-4.2.1.tar.xz
解压缩源码包之后建议先阅读 README 与 INSTALL 文档,里面有关于编译的相关信息。
mpfr 支持的是 GNU Build System 编译系统,简单理解就是 Unix 经典编译三部曲: ./configure
, make
, make install
。
在进行交叉编译前,首先创建一个环境配置文件 aarch64-environment-setup
,配置最重要的交叉编译环境变量:
aarch64-environment-setup:
export TOOLCHAIN_ROOT=/opt/toolchains/aarch64--glibc--stable-2022.03-1
export BUILDSYSROOT=$TOOLCHAIN_ROOT/aarch64-buildroot-linux-gnu/sysroot
export PATH=$TOOLCHAIN_ROOT/bin:$PATH
export PREFIX=/usr
export CC="aarch64-linux-gcc --sysroot=$BUILDSYSROOT"
export CXX="aarch64-linux-g++ --sysroot=$BUILDSYSROOT"
export CPP="aarch64-linux-gcc -E --sysroot=$BUILDSYSROOT"
export LD="aarch64-linux-ld --sysroot=$BUILDSYSROOT"
export AR=aarch64-linux-ar
export AS=aarch64-linux-as
export NM=aarch64-linux-nm
export GDB=aarch64-linux-gdb
export OBJDUMP=aarch64-linux-objdump
export OBJCOPY=aarch64-linux-objcopy
export RANLIB=aarch64-linux-ranlib
export READELF=aarch64-linux-readelf
export STRIP=aarch64-linux-strip
export CONFIGURE_FLAGS="--host=aarch64-linux --build=x86_64-linux"
export PKG_CONFIG_SYSROOT_DIR=$BUILDSYSROOT
export PKG_CONFIG_PATH=$BUILDSYSROOT/usr/lib/pkgconfig:$BUILDSYSROOT/usr/share/pkgconfig
在本示例中,交叉编译工具位于 /opt/toolchains/aarch64--glibc--stable-2022.03-1/bin
目录下,将该目录配置到 PATH 环境变量,让系统能够正确搜索到。同时在配置 CC,CXX,CPP 与 LD 环境变量时指定 --sysroot=<dir>
参数让交叉编译器搜索 dir 目录下的头文件与库文件,而不是 /usr/include
及 /usr/lib
。
cd mpfr-4.2.1
source aarch64-environment-setup
./configure --prefix=/usr $CONFIGURE_FLAGS
make
make DESTDIR=$BUILDSYSROOT install
- 源码包解压后,使用
cd
命令切换到源码路径 - 在源码目录下创建环境设置文件并调用
source
命令让环境变量生效 - 执行源码包的
configure
文件,带上--prefix
参数,指定安装路径。在配置文件中定义了临时的 CONFIGURE_FLAGS 来指定--host
与--build
选项的值,具体的说明可以使用./configure --help
命令进行查阅 - 执行
make
命令编译源码 - 使用 DESTDIR 参数作为安装目标文件的前缀变量,后面带上你希望安装到的文件夹路径,详细介绍可以参考 DESTDIR 官方介绍。或者参考我的博文「交叉编译 gmp」关于 DESTDIR 的用法说明。
最终你就可以在环境变量定义的 $BUILDSYSROOT
目录中找到交叉编译好的 libmpfr 的头文件及库文件。
Good luck.
欢迎关注我的公众号:飞翔的小黄鸭
也许会发现不一样的风景