You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

交叉编译GNU coreutils for ARM遇执行错误,求解决建议

解决ARM交叉编译GNU coreutils时make-prime-list运行失败的问题

我之前交叉编译coreutils到ARM平台时也碰到过一模一样的问题!这个坑核心是没理清编译过程中主机端辅助工具和目标ARM程序的编译工具差异,导致本该在x64主机运行的make-prime-list被编译成了ARM架构的二进制,自然跑不起来。给你几个亲测有效的解决步骤:

问题根源

coreutils编译时会生成几个临时辅助工具(比如make-prime-list),这些工具是用来辅助生成目标程序的,需要在你的x64编译主机上运行。但如果交叉编译配置没做好,configure脚本会错误地用ARM交叉工具链编译这些辅助程序,生成的ARM二进制在x64主机上执行就会出现格式错误。

具体解决建议

1. 先正确配置交叉编译环境变量

先把ARM交叉工具链的环境变量设好(根据你实际的工具链前缀调整,比如arm-linux-gnueabihf-):

export CC=arm-linux-gnueabihf-gcc
export CXX=arm-linux-gnueabihf-g++
export AR=arm-linux-gnueabihf-ar
export LD=arm-linux-gnueabihf-ld

2. 用--build和--host参数明确告知configure架构信息

这是最关键的一步!configure脚本需要知道你的编译主机架构(x64)和目标平台架构(ARM),这样它才会分别用主机编译器和交叉工具链编译对应的程序。

假设你的x64主机架构是x86_64-pc-linux-gnu,目标ARM平台是arm-linux-gnueabihf,执行以下configure命令:

./configure --build=x86_64-pc-linux-gnu --host=arm-linux-gnueabihf --prefix=/path/to/your/arm/install/dir

这里--prefix是指定编译完成后安装到的目录,你可以根据自己的需求修改。

3. 手动指定主机编译器(如果configure还是识别错误)

如果上面的命令还是没生效,可能是configure没自动识别到主机的gcc,这时候可以手动设置BUILD_CC环境变量强制指定:

export BUILD_CC=gcc
./configure --build=x86_64-pc-linux-gnu --host=arm-linux-gnueabihf --prefix=/path/to/your/arm/install/dir

这样configure就会用主机的gcc编译make-prime-list这类辅助工具,不会再用交叉编译器了。

4. 清理残留文件后重新编译

如果之前已经尝试过编译,残留的中间文件可能干扰新的编译过程,先彻底清理:

make distclean

然后重新执行configure和编译:

./configure --build=x86_64-pc-linux-gnu --host=arm-linux-gnueabihf --prefix=/path/to/your/arm/install/dir
make -j$(nproc)  # 用所有CPU核心加速编译
make install

5. 排查:检查make-prime-list的架构

如果还是有问题,可以先检查生成的make-prime-list是什么架构,确认问题所在:

file make-prime-list

如果输出显示是ARM架构(比如ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV)),说明还是用了交叉编译器编译它,回到前面的步骤确认--build参数和BUILD_CC是否正确设置;如果输出是x86_64架构,那问题可能出在其他依赖上,不过这种情况很少见。


内容的提问来源于stack exchange,提问作者Campa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:27:48