针对特定 CXXABI 和 GLIBCXX 版本进行交叉编译

Cross compile for specific CXXABI and GLIBCXX version

我想在 Linaro 14.04 上为 ARM 目标 运行ning 交叉编译一个软件。

当我使用 arm-linux-gnueabihf-g++ 从我的 Ubuntu 18.04 交叉编译时,我尝试 运行 它在目标上,我得到这个错误:

./main: /usr/lib/arm-linux-gnueabihf/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by ./main)

./main: /usr/lib/arm-linux-gnueabihf/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by ./main)

我的问题是我无法升级目标上的任何库。

所以我的问题是,我可以在编译时指定特定版本的 GLIBC 和 CABI 吗?

非常感谢

您需要找到与目标的 libstdc++ 相同版本的编译器。

当新符号添加到 libstdc++ 时,这些 ABI 版本有时(并非总是)增加。

你最好的选择是在任何情况下总是在你的构建机器上安装相同的 OS 版本。这保证具有相同的工具链版本(尽管交叉编译器可能略有不同)。

旧答案如下。没有适用于 GCC-4 的软件包,因此您必须安装较旧的 Ubuntu 版本。


好像Ubuntu18.04有几个GCC版本: https://packages.ubuntu.com/search?keywords=arm-linux-gnueabihf&searchon=names&suite=bionic&section=all

我会尝试适合您的目标的最新版本。您还可以比较 libstdc++ 的 so 版本。so.X.Y.Z 并确保您使用的 GCC 版本与 libstdc++ so 版本最大是目标机器上的版本。

如果您好奇,可以在此处找到定义这些符号版本的文件:https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/config/abi/pre/gnu.ver

进一步查看该文件,我发现了这个提交:https://github.com/gcc-mirror/gcc/commit/c19175577e1cbf749590889441ad5dd03bb2c9d7 它添加了您缺少的符号版本,并且 Github 将其标记为存在于 GCC 5 中。不幸的是,Ubuntu 18.04 没有 pre-5 GCC 工具链。