Linux gcc編譯過程及Makefile檔案

2021-10-05 18:06:06 字數 1869 閱讀 4792

選項

含義-o

指定輸出檔名稱

-e只預處理

-s只編譯

-c編譯和彙編,但是不鏈結

巨集的替換,處理預處理指令,刪除注釋,include的檔案加入到該檔案,新增行號和檔案的標識;

gcc -e main.c -o main.i
檔案一下變大很多,檢視內容是stdio.h的函式定義等內容

由高階語言,生成彙編**;

gcc -s main.i
生成main.s檔案,彙編**

彙編**生成二進位制**:

二進位制程式,但是不能執行,因為沒有鏈結系統相關的庫檔案

鏈結需要的庫檔案,成為可執行檔案

gcc main.c
elf格式可執行檔案

鏈結過程中,根據鏈結方式的不同,可以分為動態鏈結靜態鏈結

將test.c檔案編譯成靜態庫檔案:

gcc -c test.c,生成目標檔案;

ar -r test.a test.o,使用ar工具靜態編譯,形成test.a靜態庫檔案;

gcc test.a main.c,靜態編譯成可執行檔案。

gcc -fpic -shared test.c -o test.so,產生test.c的動態庫檔案;

gcc main.c test.so,動態編譯形成可執行檔案。

此可執行檔案依賴test.so這個動態庫檔案,not found是因為這個動態庫檔案不在環境變數中。

makefile其實就是乙個shell指令碼檔案,自動化快速的幫助我們編譯原始碼,其思路和命令列下的思路基本相似。

cc = gcc

cflags = -wall -lpthread

src =

$(wildcard *.c)

obj =

$(patsubst %.c,%.o,$(src)

)$(target)

:$(obj)

@$(cc)

$(obj)

-o $(target)

$(cflags)

%.o:%.c

@$(cc)

-c $< -o $@

.phony : clean

clean:

rm$(obj)

這個makefile適用於只有一層目錄結構的**構建乙個可執行檔案

Linux gcc編譯及Makefile基本知識

linux gcc編譯及makefile基本知識 1.編寫乙個主程式,在主程式中呼叫某個子程式。thank.c include int main void thank2.c include void thank2 void 如何將兩個程式連線到一起,在linux的終端中執行命令 gcc c than...

linux gcc編譯引數

gcc 編譯 hello.c hello.i 預處理階段,生成中間檔案 hello.s 彙編階段,生成彙編檔案 hello.o 編譯階段,生成二進位制 檔案 hello 鏈結階段,生成可執行程式 預處理階段,主要是將巨集定義替換,條件編譯 標頭檔案包含,可以cat hello.i檔案檢視 gcc e...

linux gcc編譯選項

1 安全編譯選項 作業系統提供了許多安全機制來嘗試降低或阻止緩衝區溢位攻擊帶來的安全風險,包括dep aslr等。在使用gcc進行編譯時,可以使用gcc的編譯選項來避免堆疊溢位 整數溢位等問題。2 checksec.sh 3 aslr 位址隨機化 aslr address space layout ...