目标代码文件ctr1.o在gcc编译器中做了什么?

时间:2009-05-20 07:23:08

标签: linux gcc

obcc文件ctr1.o在gcc编译器中做了什么?为什么链接器会在生成可执行文件时链接这个obj文件?

3 个答案:

答案 0 :(得分:6)

我认为它包含非常基本的stuf(crt代表C运行时),比如为你的main函数设置argv和argc等......这是一个link,有一些解释

如果您不想要它,因为您正在编写一个小型引导加载程序,而不需要任何libc,您可以使用--no-stdlib选项链接您的程序。如果你这样做,你还需要编写自己的链接描述文件。

答案 1 :(得分:1)

目标文件包含已编译的代码,但它们本身不可执行。链接器的工作是获取构成程序的所有目标文件,并将它们连接成一个整体。这涉及解析目标文件(extern符号)之间的引用,检查是否存在main()入口点(对于C程序),等等。

由于每个源文件(.c或.cpp)都编译成一个单独的目标文件,然后由链接器读取,对单个C文件的更改只意味着可以重新编译,生成一个新的目标文件,然后将其与现有对象文件链接到新的可执行文件中。这使得开发更快。

更新:如另一个答案中所述,“crt.o”目标文件包含C r un t ime代码,被认为是大多数C程序所需要的。您可以阅读gcc linker options并找到--no-stdlib选项,这将告诉gcc您的特定程序不应与标准C运行时文件链接。

答案 2 :(得分:1)

我不确定理解你的问题,但我猜你是指GCC包中的'crt1.o'。

crt是libc的基本软件包之一,它提供了访问计算机的基本功能。 IIRC它包含'printf'之类的方法。

这就是为什么它经常被包含在最基本的C应用程序中。