Ubuntu安装的ARM64交叉编译器带版本后缀致autoconf识别失败原因?
解决configure找不到带版本后缀的ARM64交叉编译器问题
你遇到的问题本质是configure脚本默认会查找不带版本后缀的交叉编译工具链(比如aarch64-linux-gnu-gcc),但你的工具链全部带有-4.8后缀,所以脚本找不到它们,转而 fallback 到本地gcc了。下面是几个可行的解决方法,按推荐程度排序:
1. 显式指定交叉编译器环境变量
这是最直接且不影响系统其他配置的方法,在执行configure前设置CC、CXX等环境变量,指定你的带后缀工具链:
CC=aarch64-linux-gnu-gcc-4.8 CXX=aarch64-linux-gnu-g++-4.8 ./configure --host=aarch64-linux-gnu
如果还需要用到其他工具(比如链接器ld、汇编器as),也可以一并指定:
CC=aarch64-linux-gnu-gcc-4.8 \ CXX=aarch64-linux-gnu-g++-4.8 \ LD=aarch64-linux-gnu-ld-4.8 \ AS=aarch64-linux-gnu-as-4.8 \ ./configure --host=aarch64-linux-gnu
2. 创建软链接统一工具链名称
如果你希望后续不用每次都指定环境变量,可以给带后缀的工具链创建不带后缀的软链接,让configure能默认找到它们:
sudo ln -s /usr/bin/aarch64-linux-gnu-gcc-4.8 /usr/bin/aarch64-linux-gnu-gcc sudo ln -s /usr/bin/aarch64-linux-gnu-g++-4.8 /usr/bin/aarch64-linux-gnu-g++ sudo ln -s /usr/bin/aarch64-linux-gnu-ld-4.8 /usr/bin/aarch64-linux-gnu-ld
注意:如果系统中已经存在不带后缀的同名工具链(比如更高版本的aarch64编译器),这个操作会覆盖原有链接,所以执行前最好先检查一下。
3. 检查是否安装了完整的交叉编译依赖
除了gcc本身,交叉编译还需要配套的二进制工具、标准库头文件等,你可以检查是否安装了以下Ubuntu 16.04下的对应包:
binutils-aarch64-linux-gnu:提供交叉编译用的链接器、汇编器等工具libc6-dev-arm64-cross:ARM64架构的C标准库头文件和静态库gcc-4.8-aarch64-linux-gnu:你已经安装的交叉编译器主包
可以用下面的命令安装缺失的包:
sudo apt-get install binutils-aarch64-linux-gnu libc6-dev-arm64-cross
4. 显式指定configure的架构参数(可选)
如果遇到configure识别架构有问题,可以显式指定--build参数(你的主机架构),配合前面的环境变量一起使用:
CC=aarch64-linux-gnu-gcc-4.8 CXX=aarch64-linux-gnu-g++-4.8 ./configure --host=aarch64-linux-gnu --build=x86_64-linux-gnu
内容的提问来源于stack exchange,提问作者user3909192




