我想为在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吗?
非常感谢
答案 0 :(得分:1)
您需要找到与目标libstdc ++相同版本的编译器。
将新符号添加到libstdc ++时,有时(并非总是)这些ABI版本会增加。
无论如何,您最好的选择是始终在构建机器上安装相同的OS版本。这样可以保证具有相同的工具链版本(尽管交叉编译器可能会稍有不同)。
旧答案如下。没有适用于GCC-4的软件包,因此您必须安装较旧的Ubuntu版本。
似乎Ubuntu 18.04具有多个GCC版本: https://packages.ubuntu.com/search?keywords=arm-linux-gnueabihf&searchon=names&suite=bionic§ion=all
我会尝试适用于您目标的最新产品。您还可以将libstdc ++。so.X.Y.Z的so版本进行比较,并确保将GCC版本与libstdc ++一起使用,以便在目标计算机上最大使用该版本。
如果您感到好奇,可以在以下位置找到定义这些符号版本的文件: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没有5之前的GCC工具链。