gcc使用與分析1
gcc -v -o hello hello.o 用來顯示編譯過程
顯示編譯過程會發現許多crt1.o、crti.o、crtbegin.o、crtend.o、crtn.o這樣的obj檔案,這些檔案是gcc為了讓可執行檔案可以在linux平台執行加的系統標準啟動檔案,對於一般應用程式,這些啟動是必需的。其中-lc表示鏈結libc庫檔案 -l表示鏈結路徑
1、裸機/bootloader、linux核心等程式不需要啟動檔案、標準庫檔案。所以我們使用
gcc -v -nostdlib -o hello hello.o
2、靜態鏈結使用靜態庫進行鏈結,生成的程式包含程式執行所需要的全部庫,可以直接執行,
不過靜態鏈結生成的程式體積較大。
gcc -static -o hello_static hello.o
3、動態鏈結使用動態鏈結庫進行鏈結,生成的程式在執行的時候需要載入所需的動態庫才能執行。
動態鏈結生成的程式體積較小,但是必須依賴所需的動態庫,否則無法執行。
gcc -o hello hello.o
ldd hello 檢視動態鏈結庫
gcc使用整理(2)
gcc和g 的區別 誤區一 gcc只能編譯c g 只能編譯c 兩者都可以。但是請注意 1.字尾為.c的,gcc把它當作c語言,而g 當作是c 程式。字尾為.cpp的一樣當成c 2.編譯階段,g 會呼叫gcc,對於c 兩者是等價的。但是因為gcc命令不能自動和c 程式使用的庫鏈結,所以通常用g 完成鏈...
gcc學習與實踐 2
主要學習如下gcc選項 c m mm md mmd 編譯優化選項 o0 o1 o2 o3 wall 8 c 選項 在預處理的時候,不刪除注釋資訊,一般和 e一起使用。有時候分析程式,比較方便。比如,加上注釋的這段程式helloworld.c程式如下 include int main 如果只是使用 e...
GCC編譯流程分析
1.預處理結點 gcc的選項 e 可以使編譯器在預處理結束時就停止編譯 gcc e o hello.i hello.c 字尾名 i 的檔案是經過預處理的c原始程式。2.編譯階段 gcc的選項 s 能使編譯器在進行完編譯之前就停止。3.彙編階段 彙編階段把編譯階段生成的 s 檔案生成目標檔案,在此使用...