是否有关于binutils,glibc和GCC之间版本兼容性的官方文档?我发现this matrix用于binutils与GCC版本的兼容性。对于GCC和glibc来说,这样的事情会很好。
我要问的是,我需要知道我是否可以使用“嵌入式”glibc 2.2.4来构建GCC 4.9.2,以便能够支持像CentOS 5这样的老目标。 / p>
谢谢。
答案 0 :(得分:1)
你不太可能用这样一个新版本的gcc构建这样一个旧版本的glibc。 glibc记录了所需的最小版本的binutils& gcc在INSTALL file。
glibc-2.23指出:
Recommended Tools for Compilation
GCC 4.7 or newer
GNU 'binutils' 2.22 or later
通常如果你想要比那些更新,glibc通常会使用发布时正在开发的gcc版本。例如glibc-2.23于2016年2月18日发布,gcc-6当时正在开发中,因此glibc-2.23将与gcc-4.7一起使用gcc-6。
所以找到你想要的version of gcc,然后找到它的发布日期,然后在同一时间查看glibc releases。
所有这一切,使用旧版本的glibc是一个糟糕的主意。它将充满已知的安全漏洞(包括可远程利用的漏洞)。最新的glibc-2.23版本,例如fixed CVE-2015-7547,它影响任何执行DNS网络解析的应用程序,并影响以glibc-2.9开头的版本。记住:这不是潜伏的唯一错误。
答案 1 :(得分:0)
构建交叉编译器时,至少要考虑两种,有时是三种平台类型:
平台A 用于构建 平台B 上的交叉编译器 HOSTED ,其中TARGETS
嵌入式Platform C
的二进制文件。我特意使用了 BUILD , HOSTED 和TARGETS
这两个词,因为这些是在构建跨GCC时要进行配置的选项。
TARGET PLATFORM
:将要使用的计算机平台
运行跨GCC创建的二进制文件请考虑以下内容(Canadian Cross Config, BUILD != HOST 平台):
运行mingw32工具链的32位x86 Windows PC将用于编译跨GCC。此跨GCC将在64位x86 Linux计算机上使用。跨GCC创建的二进制文件应在运行LynxOS 178 RtOS(实时操作系统)的32位PowerPC单板计算机上运行。
在上述情况下,我们的平台如下:
已构建:i686-w32-mingw32
主机:x86_64-linux-gnu
TARGET
:powerpc-lynx-lynxos178
但是,这不是典型的配置。 内置平台和主机平台通常是相同的。
更典型的情况(常规交叉配置, BUILD == HOST 平台):
64位x86 Linux服务器将用于编译跨GCC。此跨GCC还将在64位x86 Linux计算机上使用。跨GCC创建的二进制文件应在运行LynxOS 178 RtOS(实时操作系统)的32位PowerPC单板计算机上运行。
在上述情况下,我们的平台如下:
已构建:x86_64-linux-gnu
主机:x86_64-linux-gnu
TARGET
:powerpc-lynx-lynxos178
在构建跨GCC时(假设我们正在构建常规Cross Config,其中 BUILD == HOST 平台),GNU BinUtils,GCC,glibc的本机版本,并且需要libstdc ++(以及其他库)才能实际编译跨GCC。它不是每个组件的特定版本,而是每个组件是否支持编译GCC-4.9.2所需的特定语言功能(注意:仅因为GCC-4.9.2实现了语言功能X,并不意味着该语言功能) X必须由用于编译GCC-4.9.2。的GCC版本支持。以同样的方式,仅仅因为glibc-XXX实现了库功能Y,并不意味着用于编译glibc-XXX的GCC版本必须已经被支持。链接到实现了功能Y的glibc。
在您的情况下,您只需构建跨GCC 4.9.2(或者如果您不进行交叉编译,即您要在Linux上为CentOS 5进行编译,则构建本机GCC 4.9.2),然后在链接时您的CentOS 5可执行文件,使用-l:libc.so.2.2.4
显式链接glibc v2.2.4。编译时,您可能还需要定义-std=c99
或-std=gnu99
,因为我非常怀疑glibc 2.2.4是否支持C 2011
标准。