【发布时间】:2020-05-09 05:53:32
【问题描述】:
我在我的x86 Ubuntu Bionic 系统上交叉编译aarch64 的应用程序,我遇到了glibc 版本不匹配的问题。我的交叉编译工具链使用的是 v2.27,而运行应用程序的系统使用的是 v2.24。我想可能是因为我的工具链版本太高,所以我决定降级。
在删除所有以前的交叉编译安装后,我安装了gcc-4.8-aarch64-linux-gnu(因为我已经在不同的主机系统上成功地交叉编译了这个版本的应用程序),认为它会安装一个旧的aarch64 版本的@ 987654328@ 至/usr/aarch64-linux-gnu/lib/。但是,再次安装了 v2.27(我在安装新的交叉编译工具链之前验证了该目录不存在)。
所以我的问题是双重的:
- 在安装
gcc-4.8-aarch64-linux-gnu时,是什么决定了在我的系统上安装glibc的哪个aarch64版本?是否直接与我自己系统的x86版本的glibc绑定? - 是否有正确的方法在我的系统上安装
aarch64版本的glibcv2.24(或更低版本)?
【问题讨论】:
-
问题的答案完全取决于您使用的跨工具链。其中有很多。看起来您安装的那个有一个错误,系统标头泄漏到工具链 sysroot 中。否则,glibc 版本不匹配根本不是问题。
-
我尝试过的跨工具链,我通过
sudo apt install gcc-aarch64-linux-gcc获得。但是,当我下载这个releases.linaro.org/components/toolchain/binaries/latest-4/… 时,它起作用了,因为它包含glibcv2.19。我无法解释为什么通过sudo apt get安装总是安装 v2.27... -
所以我环顾四周,提出了一个假设:我看到
gcc-aarch64-linux-gnu依赖于libc6-dev-arm64-cross。查看packages.ubuntu.com/bionic/libc6-dev-arm64-cross,我发现Bionic默认为v2.27。所以本质上,它是作为依赖安装的,并且使用的是最新版本。