我的发行版(Arch Linux)最近增加了其工具链的最小支持Linux内核版本。我正在编译一个网络应用程序,然后将其静态链接,然后上传到Web服务器,并且Web服务器上的内核版本太旧了,对于使用新工具链编译的静态库。 (当我尝试在服务器上运行静态二进制文件时,我会得到一个细分故障。)是否有一种方法可以使用GNU工具链(GCC,Binutils,glibc)来编译应用程序,以便遗漏需要新的内核版本的功能?

有帮助吗?

解决方案

GLIBC兼容性实际上只能在一个方向上保证。 (较旧的二进制文件在较新的系统上工作;反之亦然,不一定如此。)

为了确保您的二进制文件在较旧的系统上工作,请与较旧的GLIBC链接。最简单的方法是找到一个较旧的分布,但我建议建立一个“Crosstool“或类似的交叉编译工具链针对与您的构建系统使用不同的LIBC不同(这允许在主机上进行可重复的构建,而不管系统是什么)。

其他提示

谢谢。我还找到了glibc的 - 可启用 - 内核选项,该选项可以与早期的内核一起工作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top