我的本地 gcc 说,它的三元组如下。
> gcc -dumpmachine
x86_64-suse-linux
其中cpu-vendor-os对应x86_64、suse、linux。后者意味着 glibs 正在使用中(?)。当我在交叉编译基于busybux的系统时,编译器三元组类似于avr32-linux-uclibc,其中os是'linux-uclibc',这意味着使用了uclibc。
'linux-glibc' 和 'linux-uclibc' 之间的区别在于(AFAIU)collect2 行为和 libgcc.a 内容。glibc 或 uclibs 都以静默方式链接到目标二进制文件。
问题是 linux 内核是如何被相同的编译器编译的?一旦内核在裸机上运行,它就不能与任何类型的用户空间 libc 链接,并且应该使用适当的 libgcc.a