8

我正在尝试构建一个可以在多个 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 上工作吗?

或者,是否只有一些方便的编译器标志或包我可以安装来解决问题?

4

2 回答 2

5

我发现的最佳解决方案是安装运行 Debian stable 的虚拟机,并在此基础上进行构建。Debian stable 已经足够老了,任何用它构建的软件包都可以在任何其他基于 Debian 的发行版上运行,比如 Ubuntu。您可能必须解决已在各种软件的更高版本中修复但未向后移植到 Debian stable 的非关键错误。

于 2010-05-04T20:33:42.803 回答
1

如果您真的想确保它在每个最近的发行版上运行,您还可以考虑静态链接到您选择的 libC。但是,如果您使用仅由较新内核提供的功能(例如较新的系统调用),您可能仍然会遇到问题。

于 2010-05-04T23:22:03.887 回答