针对特定 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§ion=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 工具链。
我想在 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§ion=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 工具链。