linux gcc編譯及makefile基本知識:1.編寫乙個主程式,在主程式中呼叫某個子程式。
thank.c
#include
int main(void)
thank2.c
#include
void thank2(void)
如何將兩個程式連線到一起,在linux的終端中執行命令
gcc -c thank.c thank2.c //gcc -c ***.c 會生成.o目標檔案
gcc -o thank thank.o thank2.o
//gcc -o ***.o會生成可執行二進位制檔案,若沒有指定名字,預設為a.out
./thank //執行
ll thank* //檢視thank的檔案顯示警告資訊
gcc -wall -c thank.c thank2.c
2.呼叫外部函式:加入鏈結的函式庫
sin.c中
#include
int main(void)
若直接使用gcc -c sin.c會出現無法找到sin函式的錯誤(undefines reference to sin)
所以 必須要連線必要的庫(c語言裡面的sin函式在linm.so這個函式庫中)
gcc -c sin.c -lm -l/lib -l/usr/lib總結gcc的用法
//僅編譯生成鏈結檔案
gcc -c hello.c
//直接編譯生成可執行文建(不加引數./a.out)
gcc hello.c
//在編譯的時候依據操作環境給予優化執行速度
gcc -o hello.c -c
//在製作二進位制檔案的時候,將鏈結的函式庫與相關路徑填入
gcc sin.c -lm -l/usr/lib -i/usr/include
//-lm是指libm.so或libm.a這個函式庫檔案
//-l後面接的是路徑是剛才上面那個函式庫的搜尋目錄
//-i後面接的是原始碼內的include檔案所在目錄
//生成某個特定名字的可執行檔案
gcc -o hello hello.c
//顯示警告資訊
gcc -o hello hello.c -wall2.makefile的基本用法
一、基本規則:
(1)makefile中#表示批註
(2)在命令行前一定要用
(3)目標與相關檔案之間用:隔開
vi makefile
main:main.o hh.o sin.o cos.o
gcc -o main main.o hh.o sin.o cos.o
clean:
rm -f main main.o hh.o sin.o cos.o想要先清除資訊在建立main資訊,可以make clean main
二、可以使用shell script簡化指令碼
libs = -lm
objs = main.o hh.o sin.o cos.o
main:$
gcc -o main $ $
clean:
rm -f main $
Linux gcc編譯過程及Makefile檔案
選項 含義 o 指定輸出檔名稱 e只預處理 s只編譯 c編譯和彙編,但是不鏈結 巨集的替換,處理預處理指令,刪除注釋,include的檔案加入到該檔案,新增行號和檔案的標識 gcc e main.c o main.i檔案一下變大很多,檢視內容是stdio.h的函式定義等內容 由高階語言,生成彙編 g...
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 ...