1

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

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

./main: /usr/lib/arm-linux-gnueabihf/libstdc++.so.6: 找不到版本‘CXXABI_1.3.9’(./main 需要)

./main: /usr/lib/arm-linux-gnueabihf/libstdc++.so.6: 未找到版本“GLIBCXX_3.4.21”(./main 需要)

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

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

非常感谢

4

1 回答 1

2

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

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

在任何情况下,您最好的选择是始终在您的构建机器上安装相同的操作系统版本。保证具有相同的工具链版本(尽管交叉编译器可能略有不同)。

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


看来 Ubuntu 18.04 有几个 GCC 版本: https://packages.ubuntu.com/search?keywords=arm-linux-gnueabihf&searchon=names&suite=bionic§ion=all

我会尝试适合您目标的最新版本。您还可以比较 libstdc++.so.XYZ 的 so 版本,并确保您使用 GCC 版本和 libstdc++ so 版本的最大版本在您的目标机器上。

If you're curious, the file defining these symbol versions can be found here: https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/config/abi/pre/gnu.ver.

Looking further in that file, I found this commit: https://github.com/gcc-mirror/gcc/commit/c19175577e1cbf749590889441ad5dd03bb2c9d7 It adds the version of symbols you are missing, and Github marks this as being present in GCC 5. Unfortunately, Ubuntu 18.04 does not have a pre-5 GCC toolchain.

于 2019-02-28T12:29:33.983 回答