交叉编译时出现gcc: error trying to exec 'cc1'错误求助
解决交叉编译Linux内核时
gcc: error trying to exec 'cc1'的问题 我碰到过好几次这个问题,通常都是交叉编译工具链的完整性、路径配置或者系统依赖缺失导致的,给你几个具体的排查和解决步骤:
1. 检查交叉编译工具链的完整性
cc1是gcc的核心编译组件,这个错误首先要确认它是否存在于你的工具链中:
- 执行以下命令查找
cc1的位置(注意替换成你工具链实际的gcc版本号,2012.03版本的gcc通常是4.6.3):ls /opt/arm-2012.03/arm-none-linux-gnueabi/bin/../libexec/gcc/arm-none-linux-gnueabi/4.6.3/cc1 - 如果命令返回“No such file or directory”,说明你的工具链安装不完整或者下载时文件损坏,需要重新下载完整的Parrot工具链包并重新安装。
2. 配置正确的环境变量
即使工具链里有cc1,如果系统找不到它的路径也会报错,建议把工具链的bin目录添加到系统PATH中:
- 临时生效(当前shell会话):
export PATH=/opt/arm-2012.03/arm-none-linux-gnueabi/bin:$PATH - 永久生效(添加到
~/.bashrc或~/.profile):echo 'export PATH=/opt/arm-2012.03/arm-none-linux-gnueabi/bin:$PATH' >> ~/.bashrc source ~/.bashrc
配置完成后,再回到内核目录重新执行编译命令。
3. 安装64位系统所需的32位兼容库
如果你使用的是64位Linux系统,老版本的ARM交叉编译工具链(比如2012.03版本)依赖32位系统库,缺失这些库会导致cc1无法执行:
- 对于Debian/Ubuntu系列系统:
sudo apt-get update && sudo apt-get install lib32gcc-s1 lib32stdc++6 lib32z1 lib32ncurses5 - 对于RHEL/CentOS系列系统:
sudo yum install glibc.i686 libstdc++.i686 zlib.i686 ncurses-libs.i686
安装完成后再次尝试编译。
4. 验证工具链是否正常工作
在解决完上述问题后,可以先测试交叉编译gcc是否能正常调用cc1:
arm-none-linux-gnueabi-gcc -v
如果输出中能看到类似COLLECT_GCC_OPTIONS=... -quiet -v ... /opt/arm-2012.03/.../cc1的内容,说明工具链已经正常工作,此时再回到内核目录执行你的编译命令:
make ARCH=arm zImage CROSS_COMPILE=/opt/arm-2012.03/arm-none-linux-gnueabi/bin/arm-none-linux-gnueabi-
(注意:这里建议把CROSS_COMPILE的路径补全到前缀,比如arm-none-linux-gnueabi-,避免路径识别问题)
内容的提问来源于stack exchange,提问作者n_lona
相关产品推荐
相关产品推荐

