我询问这个问题的原因是我需要知道是否可以使用“嵌入式”glibc 2.2.4构建交叉GCC 4.9.2,以支持像CentOS 5这样的旧目标。
谢谢。
Recommended Tools for Compilation
GCC 4.7 or newer
GNU 'binutils' 2.22 or later
在构建交叉编译器时,至少需要考虑两种平台类型,有时甚至需要考虑三种:
平台A用于在平台B上构建一个交叉编译器,该编译器目标
嵌入式平台C
的二进制文件。我故意使用了构建、托管和目标
这些词语,因为这些是在构建交叉GCC时传递给配置选项的选项。
目标平台
:运行由交叉GCC创建的二进制文件的机器平台TARGET
: powerpc-lynx-lynxos178然而,这不是典型的配置。通常情况下,BUILD PLATFORM和HOST PLATFORM是相同的。
更典型的情况(常规交叉配置,BUILD == HOST平台):
一个64位x86 Linux服务器将用于编译交叉GCC。这个交叉GCC也将在64位x86 Linux计算机上使用。由交叉GCC创建的二进制文件应该在运行LynxOS 178 RtOS(实时操作系统)的32位PowerPC单板计算机上运行。
在上述情况下,我们的平台如下:
BUILD: x86_64-linux-gnu
HOST: x86_64-linux-gnu
TARGET
: powerpc-lynx-lynxos178
在构建交叉GCC时(假设我们正在构建常规交叉配置,其中BUILD == HOST平台),实际编译交叉GCC需要GNU BinUtils、GCC、glibc和libstdc++(以及其他库)的本地版本。它与每个组件的特定版本有关,而不是每个组件是否支持编译GCC-4.9.2所需的特定语言功能(注意:仅因为GCC-4.9.2实现了语言功能X,并不意味着编译GCC-4.9.2的GCC版本必须支持语言功能X。同样,仅因为glibc-X.X.X实现了库功能Y,并不意味着用于编译glibc-X.X.X的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
标准。
-std=c99
,然后手动链接使用LDFLAGS=-nostdlib
和LDLIBS=-l:libc.so.2.2.2
。 - Vinny