构建不需要最新glibc的软件的最佳方法是什么?

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上正常工作吗?
或者,是否有一些方便的编译器标志或软件包可供安装以解决问题?
2个回答

5

我发现最好的解决方案是安装一个运行Debian稳定版的虚拟机,并在其上进行构建。Debian稳定版已经足够古老,使用它构建的任何软件包都可以在其他基于Debian的发行版(如Ubuntu)上运行。您可能需要解决一些非关键性错误,这些错误已经在各种软件的后续版本中得到修复,但未被移植到Debian稳定版。


我理解这意味着在古老版本的glibc上构建仍将在更新版本的glibc上正常工作? - ZorbaTHut
据我所知,是的……让我这样说,它还没有出错。;-) - ptomato

1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接