构建linux-gnueabihf交叉编译器时,MPC配置无法识别已安装MPFR
解决交叉编译MPC时找不到MPFR的问题
先解释两个疑问
- 关于
ac_nonexistent.h:这是Autoconf生成的configure脚本的常规测试步骤,用来验证编译器对不存在头文件的错误处理逻辑,不是真的需要这个文件,这个错误可以直接忽略,真正的故障点是找不到mpfr.h。 - 关于
mpfr.h位置异常:你当前的mpfr.h在MPFR源码的src目录,说明你只完成了MPFR的编译,没有执行make install将头文件和库安装到--prefix指定的目录下,导致MPC的configure脚本无法找到它。
分步解决方案
1. 完成GMP和MPFR的安装
进入GMP和MPFR的源码目录,执行安装操作,将头文件和库部署到指定的prefix路径:
# 安装GMP cd /opt/arm-linux-gnueabihf/gcc/gmp-6.3.0 make install # 安装MPFR cd /opt/arm-linux-gnueabihf/gcc/mpfr-4.2.2 make install
执行后,GMP和MPFR的头文件会被复制到/opt/arm-linux-gnueabihf/gcc/include,库文件会到/opt/arm-linux-gnueabihf/gcc/lib,这是configure脚本默认查找的路径。
2. 修正MPC的configure命令
关键:指定交叉编译目标主机
你是为树莓派(arm-linux-gnueabihf)交叉编译,必须在configure时指定--host参数,否则会默认用本机x86_64的gcc编译,导致ABI不匹配(这也是报错里提到的"different ABI"的核心原因)。
执行以下命令配置MPC:
cd /opt/arm-linux-gnueabihf/gcc/mpc-1.3.1 ./configure \ --disable-shared \ --enable-static \ --prefix=/opt/arm-linux-gnueabihf/gcc \ --host=arm-linux-gnueabihf \ --with-gmp=/opt/arm-linux-gnueabihf/gcc \ --with-mpfr=/opt/arm-linux-gnueabihf/gcc
若仍有找不到头文件的问题,手动指定环境变量
如果configure还是无法找到头文件,先设置环境变量指定头文件和库的路径,再执行configure:
export C_INCLUDE_PATH=/opt/arm-linux-gnueabihf/gcc/include:$C_INCLUDE_PATH export LIBRARY_PATH=/opt/arm-linux-gnueabihf/gcc/lib:$LIBRARY_PATH ./configure \ --disable-shared \ --enable-static \ --prefix=/opt/arm-linux-gnueabihf/gcc \ --host=arm-linux-gnueabihf \ --with-gmp=/opt/arm-linux-gnueabihf/gcc \ --with-mpfr=/opt/arm-linux-gnueabihf/gcc
3. 验证配置结果
如果configure成功执行,会输出MPFR和GMP的检测结果,之后执行make && make install完成MPC的编译和安装。
内容的提问来源于stack exchange,提问作者Neppomuk
相关产品推荐
相关产品推荐

