各种glibc和Linux内核版本的兼容性

各种glibc和Linux内核版本的兼容性,第1张

概述在构建编译器时,除了glibc版本之外,还必须指定 Linux头版本和最小支持的内核版本.然后在目标机器上有实际的内核版本和glibc版本(具有自己的内核头文件版本和最低支持的内核版本).我很难理解这些版本是如何结合在一起的. 示例1:假设我的系统具有针对内核头3.14构建的glibc 2.13.这有任何意义吗? glibc 2.13(2011年发布)如何使用3.14(2014年发布)的新内核功能 在构建编译器时,除了glibc版本之外,还必须指定 Linux头版本和最小支持的内核版本.然后在目标机器上有实际的内核版本和glibc版本(具有自己的内核头文件版本和最低支持的内核版本).我很难理解这些版本是如何结合在一起的.

示例1:假设我的系统具有针对内核头3.14构建的glibc 2.13.这有任何意义吗? glibc 2.13(2011年发布)如何使用3.14(2014年发布)的新内核功能?

示例2:假设我的编译器的glibc版本高于2.13.编译程序是否可以在glibc 2.13系统上运行?如果编译器的glibc版本早于2.13?

示例3:从https://sourceware.org/glibc/wiki/FAQ#What_version_of_the_Linux_kernel_headers_should_be_used.3F开始,我了解如果它满足编译glibc时使用的“最小内核版本”,则可以使用旧内核.但我不明白这段话反过来(用旧内核头编译GNU C库并在最近的内核上运行)并不一定按预期工作.例如,如果您使用旧的内核头文件来编译GNU C库,则无法使用新的内核功能.这是唯一可能发生在我身上的事情吗?如果内核比编译时更新,它会不会在glibc中破坏某些东西?

示例4:在glibc设置中做更细微的差别(例如,将可执行文件与针对内核头文件3.Y编译的glibc版本2.X链接到最小支持内核版本2.6.A并在具有相同glibc 2.X的系统上执行,但针对内核头文件编译3.Z与minumum支持内核版本2.6.B)影响什么?我怀疑他们不是,但我想确定.

这么多问题:)谢谢!

解决方法 >你不能轻易(对于这个词的任何定义)使用旧版本的glibc更新的内核功能.如果你真的需要,你可以直接调用系统调用(使用syscall()库函数)并从用户空间内核头文件中挖掘所需的任何常量值和数据结构(在较新的内核中包含的内容包括/ uAPI) .另一方面,内核开发人员通常承诺不会破坏较新内核中的遗留功能,因此较旧的glibc版本会按预期工作(好吧,差不多).
>较旧的程序仍然适用于较新版本的glibc,因为glibc支持符号的版本控制(有关详细信息,请参见此处: https://www.kernel.org/pub/software/libs/glibc/hjl/compat/).如果您的程序与较新版本的glibc动态链接而没有特殊规定(如上面的链接所述),您将无法使用较旧版本的glibc库运行它(动态链接器将抱怨未解析的符号,作为正确的符号版本将无法使用). 总结

以上是内存溢出为你收集整理的各种glibc和Linux内核版本的兼容性全部内容,希望文章能够帮你解决各种glibc和Linux内核版本的兼容性所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1026064.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存