linux gcc 靜態編譯和動態編譯

2021-06-19 07:41:14 字數 1351 閱讀 8599

一.編譯和鏈結選項:

第一步:預編譯。

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 ...