C++ 预期;“内核太旧”;2.6.16和2.6.26内核版本之间的错误

C++ 预期;“内核太旧”;2.6.16和2.6.26内核版本之间的错误,c++,linux,linux-kernel,C++,Linux,Linux Kernel,我在一台运行内核为2.6.26-2-amd64的Linux(Debian)的机器上构建了一个应用程序,我想在另一台运行内核为2.6.16.60-0.21-smp的Linux(Suse)的机器上运行这个应用程序,但我遇到了错误“致命:内核太旧” 我从互联网上的研究中了解到,在构建一个glibc库时可能会发生这种情况,该库没有编译以支持较旧的内核版本,但它通常涉及到版本2.4。对于同一系列(2.6)的内核,有可能出现这样的错误吗?或者这可能是其他原因造成的 此外,我还了解到,这个问题的解决方案是根据

我在一台运行内核为2.6.26-2-amd64的Linux(Debian)的机器上构建了一个应用程序,我想在另一台运行内核为2.6.16.60-0.21-smp的Linux(Suse)的机器上运行这个应用程序,但我遇到了错误“致命:内核太旧”

我从互联网上的研究中了解到,在构建一个glibc库时可能会发生这种情况,该库没有编译以支持较旧的内核版本,但它通常涉及到版本2.4。对于同一系列(2.6)的内核,有可能出现这样的错误吗?或者这可能是其他原因造成的

此外,我还了解到,这个问题的解决方案是根据使用适当的--enable kernel=version选项编译的glibc的另一个版本重新构建应用程序。作为一种替代方法,您可以将您的应用程序与glibc动态链接以解决问题吗

谢谢你的帮助

更新:我理解我的问题可能看起来很模糊,或者已经提到的解决方案(动态链接、构建另一个[虚拟]系统、重建glibc[考虑到我读到的评论,这似乎很棘手])解决了我的问题,但我最终要寻找的是防止此类问题的方法

例如,可以找到哪些版本的Linux内核与特定的glibc版本兼容吗

更新2:我最终找到了glibc的源补丁(适用于Debian,但我想其他发行版也有类似的在线文档),其中(我想)包含了我一直在寻找的信息

:


这就解释了“内核太旧”错误。希望它能帮助其他人。

确定给定ELF文件的最低内核版本的一种方法是在其上运行
文件,如下所示:

$ echo 'int main(){}' > test.c
$ gcc -o test test.c
$ file test
test: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.38, not stripped

这里最重要的部分是“
for GNU/Linux 2.6.38
”,它指出了最低内核版本。

我认为您的分析似乎是合理的。因此,考虑到您列出的解决方案,您是否尝试过简单的方法:使用动态链接编译您的应用程序?是的,我已经尝试过,到目前为止它似乎可以工作,但我尚未测试所有功能,因此我只希望它能继续工作。但我真正想知道的是,为什么我会在我看来不是那么不同的内核版本之间出现这种错误,以及将来如何防止这种错误。有没有列出已知不兼容的文档?你看过autoconf/automake吗?我真的不知道这些程序与我的问题有什么关系。据我所知,这些工具用于从源代码构建configure/makefile文件。我所寻找的几乎是相反的:在不访问源代码的情况下检索配置选项。但是我对这些工具的了解非常有限,所以我可能错过了一些东西。非常感谢,我测试了这些工具,它证实了我在debian文档中找到的东西。错过了这样一个“简单”的解决方案有点失望,但最终知道答案仍然很棒。
$ echo 'int main(){}' > test.c
$ gcc -o test test.c
$ file test
test: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.38, not stripped