在gcc編譯器中,obj文件ctr1.o做了什麼?每當生成可執行文件時,鏈接器爲什麼鏈接這個obj文件?目標代碼文件ctr1.o在gcc編譯器中做什麼?
回答
我認爲它含有非常基本的塞入(CRT代表C運行時),如設立的argv和ARGC爲您的主要功能等等......這裏是一個link一些解釋
如果你不想它,因爲你正在編寫一個小引導程序,沒有libc的任何位,你可以使用--no-stdlib選項來鏈接你的程序。如果你這樣做,你也需要編寫你自己的鏈接腳本。
目標文件包含您編譯的代碼,但本身不可執行。鏈接器的工作是獲取組成程序的所有對象文件,並將它們合併爲一個整體。這涉及到解析目標文件(extern
符號)之間的引用,檢查是否有main()
入口點(對於C程序)等等。由於每個源文件(.c或者.cpp)編譯成一個單獨的目標文件,然後由鏈接器讀取,所以對單個C文件的修改意味着只能重新編譯,生成一個新的目標文件,然後將其與現有的對象文件鏈接到一個新的可執行文件中。這使開發速度更快。
UPDATE:作爲另一個答案所述,「crt.o」目標文件持有與c - [R未噸 IME的代碼,這被假設爲通過最C程序是必要的。您可以閱讀gcc linker options並找到--no-stdlib
選項,這將告訴gcc您的特定程序不應與標準C運行時文件鏈接。
我不確定要理解你的問題,但我想你是指GCC包中的'crt1.o'。
crt是libc的基本包之一,它提供訪問計算機的基本功能。它包含了像'printf'等方法。
這就是爲什麼它通常甚至包含在最基本的C應用程序中。
crt0.o當然不包含printf。 printf通常位於libc.a – 2009-06-06 16:08:27
- 1. 什麼做在gcc /鐺編譯器選項-f和-m代表
- 2. 編譯器在這個彙編代碼中做了什麼?
- 3. 由arm-gcc編譯器編譯的c代碼的頭文件
- 4. 編譯Mach-o手臂目標文件
- 5. 將兩個GCC編譯的.o目標文件合併到第三個.o文件中
- 6. 編譯器在優化代碼時在做什麼?即-O2標誌
- 7. 爲什麼gcc在創建彙編代碼時這樣做?
- 8. 編譯gcc代碼與greenhills
- 9. 用GCC編譯WIN32代碼
- 10. 爲什麼我的.c編碼不能在GCC中編譯?
- 11. 這段代碼是做什麼的,它爲什麼編譯?
- 12. 這是什麼目標C代碼在做什麼?
- 13. 編譯Objective-C的文件到目標文件(.o)
- 14. GCC編譯器標誌「-DEVAL」
- 15. 編譯器gcc編譯器標誌的文檔?
- 16. 爲什麼gcc可以編譯C++代碼但不能鏈接?
- 17. 爲什麼gcc不能一致地編譯這段代碼?
- 18. 使用gcc編譯C文件以獲得x86彙編代碼
- 19. 爲Windows目標編譯C++ 2011代碼有什麼工具?
- 20. 使用CMD中的GCC編譯器編譯目錄中的所有.c文件
- 21. gcc編譯器在編譯時查找頭文件在哪裏?
- 22. 在osx中將對象c(.m)文件編譯爲目標文件(.o)
- 23. 出現錯誤 - gcc編譯器警告能否阻止C文件被編譯到目標文件中?
- 24. 爲什麼這段代碼不能用MS編譯器編譯?
- 25. 是否可以使用GCC編譯具有特定編譯器標誌的代碼文件的一部分?
- 26. - 預編譯標誌應該做什麼?
- 27. 什麼是-qnoweakexp xlC編譯器標誌的gcc等價物?
- 28. 編譯後代碼中的'()'是什麼?
- 29. 爲什麼編譯成中間代碼?
- 30. C++:爲什麼代碼正在編譯
警告:GCC 4.1.2中的-nostdlib選項 – psihodelia 2010-01-07 16:07:02