GCC編譯的幾個步驟


參考資料:

  https://blog.csdn.net/czg13548930186/article/details/78331692

 

 

      一個C/C++文件要經過預處理(preprocessing)、編譯(compilation)、匯編(assembly)、和連接(linking)才能變成可執行文件。

  以 hello.c為例,演示編譯命令:
  gcc -E -o hello.i hello.c

  gcc -S -o hello.s hello.i

  gcc -c -o hello.o hello.s

  gcc -o hello hello.o

  

  gcc -c -o hello.o hello.c 不作最后一步鏈接,得到hello.o二進制OBJ文件

  gcc -v -o hello hello.o //查看詳細的鏈接過程

  • crt1.o、crti.o、crtbegin.o、crtend.o、crtn.o是gcc加入的系統標准啟動文件,對於一般應用程序,這些啟動是必需的。
  • -lc:鏈接libc庫文件,其中libc庫文件中就實現了printf等函數。

  

  動態鏈接:

  默認使用動態鏈接:gcc -o hello_shared hello.o

  靜態鏈接:

  gcc -static -o hello_static hello.o

  

  -nostartfiles

不鏈接系統標准啟動文件,而標准庫文件仍然正常使用:
gcc -v -nostartfiles -o hello hello.o

  -nostdlib(最常用

不鏈接系統標准啟動文件和標准庫文件:
gcc -v -nostdlib -o hello hello.o

 

- 會提示因為沒有鏈接系統標准啟動文件和標准庫文件,而鏈接失敗
- 這個-nostdlib選項常用於裸機/bootloader、linux內核等程序,因為它們不需要啟動文件、標准庫文件。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM