gpt4 book ai didi

c - GNU Triplet、GCC 和 Linux 内核编译

转载 作者:太空狗 更新时间:2023-10-29 11:14:47 26 4
gpt4 key购买 nike

我的原生 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

最佳答案

gcc 有各种选项来控制它的工作方式。以下是一些相关的内容:

  • -nostdlib 省略到标准库和启动代码的链接
  • -nostdinc 省略在标准位置搜索头文件。
  • -ffreestanding 为独立环境(例如内核)编译

您也不需要使用 gcc 进行链接。您可以直接调用链接器,为其提供您自己的链接器映射、启动目标代码以及您需要的任何其他内容。

linux 内核构建似乎出于任意原因不使用 -ffreestanding ,但它确实控制了链接​​阶段,并确保内核在不引入任何用户空间代码的情况下得到链接。

关于c - GNU Triplet、GCC 和 Linux 内核编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19843191/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com