2009-05-20 74 views

回答

6

我認爲它含有非常基本的塞入(CRT代表C運行時),如設立的argv和ARGC爲您的主要功能等等......這裏是一個link一些解釋

如果你不想它,因爲你正在編寫一個小引導程序,沒有libc的任何位,你可以使用--no-stdlib選項來鏈接你的程序。如果你這樣做,你也需要編寫你自己的鏈接腳本。

+0

警告:GCC 4.1.2中的-nostdlib選項 – psihodelia 2010-01-07 16:07:02

1

目標文件包含您編譯的代碼,但本身不可執行。鏈接器的工作是獲取組成程序的所有對象文件,並將它們合併爲一個整體。這涉及到解析目標文件(extern符號)之間的引用,檢查是否有main()入口點(對於C程序)等等。由於每個源文件(.c或者.cpp)編譯成一個單獨的目標文件,然後由鏈接器讀取,所以對單個C文件的修改意味着只能重新編譯,生成一個新的目標文件,然後將其與現有的對象文件鏈接到一個新的可執行文件中。這使開發速度更快。

UPDATE:作爲另一個答案所述,「crt.o」目標文件持有與c - [R IME的代碼,這被假設爲通過最C程序是必要的。您可以閱讀gcc linker options並找到--no-stdlib選項,這將告訴gcc您的特定程序不應與標準C運行時文件鏈接。

1

我不確定要理解你的問題,但我想你是指GCC包中的'crt1.o'。

crt是libc的基本包之一,它提供訪問計算機的基本功能。它包含了像'printf'等方法。

這就是爲什麼它通常甚至包含在最基本的C應用程序中。

+1

crt0.o當然不包含printf。 printf通常位於libc.a – 2009-06-06 16:08:27

相關問題