交叉编译工具链冲突
记录遇到的问题,作为备忘。
1.在Ubuntu20.04上通过apt命令安装了 aarch64 交叉编译工具链
sudo apt update
sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
2.通过下载ARM官方链接的方式下载了交叉编译工具链
Downloads | GNU-A Downloads – Arm Developer
并且修改 $PATH 环境变量把下载的交叉编译工具链加到了 $PATH 路径里面。
3.问题分析
root@xxx:/tmp# ./test
./test: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by ./test)
./test: /lib/libc.so.6: version `GLIBC_2.34' not found (required by ./test)
root@xxx:/tmp#
root@xxx:/tmp#
apt命令安装的的'' 交叉编译工具安装到了 '/usr/bin' 目录,下载的交叉编译工具通过 $PATH 环境变量也加到了 Bash Shell 的执行搜索路径里面。
但是在编译目标开发板的时候我需要的是‘下载交叉编译工具路径’里的版本,但Bash Shell优先搜索到了 '/usr/bin'目录下 'apt'命令安装的版本。所以编译出来的可执行文件依赖的环境总是不符合预期。
解决方法:
卸载掉通过 'sudo apt install '安装的 aarch64 交叉编译工具链,只保留下载的交叉编译工具链,防止两者冲突。
这样编译的时Bash Shell就总是通过 $PATH 环境变量找到下载的指定路径指定版本的交叉编译工具。
总结:
不要 'sudo apt install ' 安装的交叉编译工具链和 $PATH 引用的交叉编译工具链同时存在。