我正在尝试构建一个可以在多个Linux发行版上运行的二进制包。它目前建立在Ubuntu 10.04上,但在Ubuntu 8.04上失败,出现以下错误:
./test: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by ./test)
./test: /usr/lib/libstdc.so.6: version `GLIBC_2.11' not found (required by ./test)
解决此问题的首选方法是什么?有没有办法在新的盒子上安装旧的glibc并针对它进行构建,或者我是否必须构建旧的发行版?如果我建立一个旧的glibc,它会在一个新的glibc上工作吗?
或者,或者,我可以安装一些方便的编译器标志或软件包来解决问题吗?
答案 0 :(得分:5)
我发现的最佳解决方案是安装运行Debian stable的虚拟机,并在此基础上构建。 Debian stable足够老,任何使用它构建的软件包都可以在任何其他基于Debian的发行版上运行,比如Ubuntu。您可能必须解决已在各种软件的更高版本中修复但未向后移植到Debian stable的非关键错误。
答案 1 :(得分:1)
如果你真的想确保它在每个最近的发行版上运行,你也可以考虑静态链接你选择的libC。但是,如果使用仅由较新内核提供的功能(例如较新的系统调用),则可能仍然会遇到问题。