2010-05-04 83 views
8

我试图构建一个可以在多个Linux发行版上运行的二进制包。它是目前建在Ubuntu 10.04,但在Ubuntu 8.04与以下错误失败:构建不需要最新glibc的软件的最佳方法是什么?

./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?

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

回答

5

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

+0

我认为这意味着建立在古代版本的glibc上仍然可以在新版本的glibc上正常工作? – ZorbaTHut 2010-05-04 23:13:31

+0

据我所知,是的......让我这样说,它还没有出错。 ;-) – ptomato 2010-05-04 23:43:19

1

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

相关问题