6

我在一台最新的 Linux 机器上静态编译和链接了一个程序,然后在另一个 9 岁的 Linux 上运行它。它给了我一个错误“致命:内核太旧”并退出。具体来说,新版本是 Fedora 18(gcc 4.7.2,glibc 2.16,内核 3.7.2),旧版本是 RHEL4.8(glibc 2.3.4,内核 2.6.9)。由于它是静态链接,因此 glibc 版本无关紧要。我想这里的问题是程序调用不在旧内核中的系统调用。

如果在旧系统上开发不是一个选项,我如何在新系统中构建程序并在旧系统中运行(甚至更好,两者都可以)?我正在寻找一种在兼容模式下运行 gcc 的方法,它只调用旧的系统调用。还没有运气。

4

1 回答 1

5

最简单的选择是始终在旧系统上构建。

或者,将 glibc 头文件和静态库从旧系统复制到新系统并链接它们。

如果这不起作用,您将不得不使用--enable-kernel=2.6.9或类似的东西重建 glibc。

于 2013-01-16T17:04:41.047 回答