C++ 交叉编译特定的CXXABI和GLIBCXX版本

C++ 交叉编译特定的CXXABI和GLIBCXX版本,c++,arm,glibc,linaro,C++,Arm,Glibc,Linaro,我想为运行在Linaro 14.04上的ARM目标交叉编译一个软件 当我使用arm-linux-gnueabihf-g++从我的ubuntu18.04交叉编译,并尝试在target上运行它时,我得到以下错误: ./main:/usr/lib/armlinux gnueabihf/libstdc++.so.6:version `未找到CXXABI_1.3.9'(由./main所需) /main:/usr/lib/arm-linux-gnueabihf/libstdc++.so.6:version`

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

当我使用arm-linux-gnueabihf-g++从我的ubuntu18.04交叉编译,并尝试在target上运行它时,我得到以下错误:

./main:/usr/lib/armlinux gnueabihf/libstdc++.so.6:version `未找到CXXABI_1.3.9'(由./main所需)

/main:/usr/lib/arm-linux-gnueabihf/libstdc++.so.6:version`GLIBCXX_3.4.21' 未找到(由./main所需)

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

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


非常感谢

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

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

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

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


Ubuntu 18.04似乎有几个GCC版本:

我想试试对你的目标有效的最新的。您还可以比较libstdc++.so.X.Y.Z的so版本,并确保在目标计算机上使用GCC版本和libstdc++so版本

如果您好奇,可以在此处找到定义这些符号版本的文件:

进一步查看该文件,我发现此提交:
它添加您缺少的符号版本,Github将其标记为存在于GCC 5中。不幸的是,Ubuntu 18.04没有一个前5GCC工具链。

看起来好像没有ARM的C++标准库。谢谢你的解释!因此,我可能会在Ubuntu14.04上安装一个Docker映像库,并在Itan上安装工具链。我用另一台安装了arm-linux-gnueabihf-g++-4.8的计算机进行了尝试,效果很好。但在V5.0中,这不起作用