gcc交叉编译:error float.h values not known for cross-compiler

本文介绍了一种解决使用simplescalar交叉编译器2.7.2.3编译时遇到的float.h文件错误的方法。具体而言,通过将系统gcc的float.h文件复制到simplescalar的相应目录下,可以成功解决该问题。

使用simplescalar的交叉编译器2.7.2.3编译时报错:

XXX/include/float.h:1: #error float.h values not known for cross-compiler

找到交叉编译器 gcc2.7.2.3 的 include 目录下发现,有 float.h 文件,但内容只有一行,就是上面的错误信息。真无语……

解决方法:

找到系统gcc 的 include 目录下的 float.h,复制到 交叉编译器的相应目录下。

我的系统是64位 ubuntu,系统 gcc4.6 的float.h位于:

/usr/lib/gcc/x86_64-linux-gnu/4.6/include/ 然后复制到交叉编译器的include 目录下。

simplescalarde 的目录如下:

simplescalar/lib/gcc-lib/sslittle-na-sstrix/2.7.2.3/include/ 

以及

simplescalar/gcc-2.7.2.3/include/ .

你当前的错误输出非常关键,揭示了多个问题叠加在一起。我们来逐条分析并解决: --- ### 🔍 当前完整错误日志解析 ```bash + Linux 5.15.0-139-generic x86_64 checking for C compiler ... found but is not working ./configure: error: C compiler /usr/bin/aarch64-linux-gnu-gcc is not found + using GNU C compiler + gcc version: 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2) checking for gcc -pipe switch ... found checking for --with-ld-opt="-lcrypt" ... not found ./configure: error: the invalid value in --with-ld-opt="-lcrypt" ``` 这里有 **三个不同但相互关联的问题**: --- ## ❌ 问题一:`C compiler /usr/bin/aarch64-linux-gnu-gcc is not found` 虽然提示说“not found”,但下面又显示 `gcc version: 9.4.0` —— 这说明你本机的 **x86_64 的 gcc 被检测到了**,但 **交叉编译器 aarch64-linux-gnu-gcc 没有正确安装或不可用**。 ### ✅ 解决方案:安装 aarch64 交叉编译工具链 运行以下命令安装: ```bash sudo apt update sudo apt install gcc-aarch64-linux-gnu ``` ✅ 安装完成后验证是否存在: ```bash ls /usr/bin/aarch64-linux-gnu-gcc # 或者: aarch64-linux-gnu-gcc --version ``` 你应该看到类似输出: ``` aarch64-linux-gnu-gcc (Ubuntu 9.4.0-2ubuntu1~20.04) 9.4.0 ``` > ⚠️ 如果没有这个命令,请不要继续配置 Nginx,否则会混用主机编译器导致后续更多错误! --- ## ❌ 问题二:`found but is not working` Nginx 的 `configure` 检测到编译器路径存在,但尝试编译一个简单的测试程序失败(通常是权限、缺失头文件、库、或架构不匹配)。 常见原因包括: - 缺少 `libc6-dev-arm64-cross` - 编译器无法生成目标代码(如缺少系统头文件) ### ✅ 解决方案:安装完整的 aarch64 交叉开发环境 ```bash sudo apt install gcc-aarch64-linux-gnu \ g++-aarch64-linux-gnu \ libc6-dev-arm64-cross ``` 这将提供必要的标准库头文件和链接支持。 --- ## ❌ 问题三:`--with-ld-opt="-lcrypt"` 导致无效参数错误 这是老问题:**不能在 `--with-ld-opt` 中使用双引号包裹值**。 ### ✅ 正确写法(无引号!): ```bash --with-ld-opt=-lcrypt ``` 或者如果你需要多个选项: ```bash --with-ld-opt='-lcrypt -L/lib/path' ``` 👉 使用单引号包裹整体值,而不是在 configure 参数里加双引号。 --- ## ✅ 最终正确的 configure 命令示例 ```bash ./configure \ --crossbuild=linux:aarch64 \ --prefix=/home/thn/nginx-aarch64 \ --with-cc=aarch64-linux-gnu-gcc \ --with-ld-opt=-lcrypt \ --without-http_rewrite_module \ --without-http_gzip_module \ --without-pcre \ --without-http_ssl_module ``` 📌 注意事项: - `--crossbuild=linux:aarch64` 告诉 Nginx 启用交叉编译模式。 - `--with-cc=...` 指定交叉编译器。 - 不要启用依赖外部库的模块(如 SSL、PCRE),除非你也交叉编译了它们。 --- ## 🧪 验证交叉编译器是否真正可用 你可以手动写一个最小程序测试: ```c // test.c #include <stdio.h> int main() { printf("Hello AArch64!\n"); return 0; } ``` 然后交叉编译: ```bash aarch64-linux-gnu-gcc -o test test.c file test ``` 输出应为: ``` test: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), statically linked, ... ``` ✅ 表示交叉编译成功。 --- ## ✅ 总结:你需要做的步骤清单 | 步骤 | 命令 | |------|------| | 1. 安装交叉编译器 | `sudo apt install gcc-aarch64-linux-gnu` | | 2. 安装配套开发库 | `sudo apt install libc6-dev-arm64-cross` | | 3. 验证编译器可用 | `aarch64-linux-gnu-gcc --version` | | 4. 使用正确语法配置 Nginx | `--with-ld-opt=-lcrypt`(无引号) | | 5. 禁用不必要的模块 | 减少依赖复杂性 | --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值