一.編譯和鏈結選項:
第一步:預編譯。
gcc -e hello.c -o hello.i
-e引數: gcc在完成預處理後,停止編譯過程。
預處理的巨集定義展開到 hello.i中。
第二步:生成目標**;
gcc -c hello.i -o hello.o
-c引數:生成目標**。
將 hello.i編譯為目標**,也可以通過原始檔直接生成。
gcc -c hello.c
第三步:鏈結
gcc hello.o -o hello
將生成的目標檔案鏈結成可執行檔案。
也可以通過原始檔直接生成。
gcc -o hello hello.c
二.設定警告選項:
1、 -pedantic 選項:
使用擴充套件語法的地方將產生相應的警告資訊
2、 -wall 選項:
要求 gcc將產生盡可能多的警告資訊
3、 -werror選項:要求 gcc將所有的警告當成錯誤進行處理
三.庫依賴選項:
1、 linux下標頭檔案和庫檔案預設目錄 :
標頭檔案 (.h): /usr/include/目錄
庫檔案 (.so, .a): /usr/lib/目錄
2、常用選項:
-i選項:向 gcc的標頭檔案搜尋路徑中新增新的目錄。
gcc -o hello hello.c -i /home/crosstar/include
要求 gcc在 /home/crosstar/include/目錄下尋找所需要的標頭檔案。
-l選項:向 gcc的庫檔案搜尋路徑中新增新的目錄。
gcc -o test test.c -l /home/crosstar/lib –lfoo
要求 gcc在 /home/crosstar/lib/目錄下尋找所需的庫檔案 libfoo.so
-l選項:要求 gcc鏈結庫檔案 libfoo.so。
注: linux下的庫檔案命名約定 :
通常以 lib三個字母開頭。
由於所有的庫檔案都遵循同樣的規範,因此在用 -l選項指定鏈結的庫檔名時可以省去 lib三個字母,也就是說 gcc在對 -lfoo進行處理時,會自動去鏈結名為 libfoo.so的檔案。
-static
選項:
強制使用靜態鏈結庫
gcc -o test test.c -l /home/crosstar/lib-static –lfoo
要求gcc
目錄下的libfoo.a
Linux GCC編譯使用動態 靜態鏈結庫
在windows下動態鏈結庫是以.dll字尾的檔案,二在linux中,是以.so作字尾的檔案。動態鏈結庫的好處就是節省記憶體空間。1 linux下建立動態鏈結庫 在使用gcc編譯程式時,只需加上 shared選項即可,這樣生成的執行程式即為動態鏈結庫。例如有檔案 hello.c x.h main.c...
linux gcc使用靜態庫去編譯生成動態庫
實現目標 main呼叫libmy test.so,libmy test.so呼叫libtest.a 原始檔 main.c,my test.c,test.c及相應.h 生成libtest.a gcc fpic c test.c ar rcs libtest.a test.o 由libtest.a生成l...
linux GCC編譯過程以及靜態庫動態庫編譯
一 gcc編譯指令各項引數 四個步驟 預處理 e gcc o test.i e test.c 彙編 s gcc o test.s s test.c 機器碼 c gcc o test.o c test.c 鏈結 依賴的檔案 gcc o test test.o o 生成目標 g 除錯 1.常用引數 l ...