linux

基本格式:gcc [options] file1 file2... //若不加入參數,則按默認參數依次執行編譯、彙編和鏈接操作,生成的可執行文件名爲 a.out
常用參數:-E //只執行預處理操作
-S //只執行到編譯操作完成,不進行彙編操作,生成的是彙編文件(.s 或 .asm),內容爲彙編語言
-c //執行編譯和彙編,但不進行鏈接,即只生成可重定位目標文件(.o),爲二進制文件,不生成完整的可執行文件
-o filename //將操作後的內容輸出到filename指定的文件中
-static //對於支持動態鏈接的系統,使用靜態鏈接而不是動態鏈接進行鏈接操作
-g //編譯時生成debug有關的程序信息(供gdb使用)
--save-temps //生成編譯過程的中間結果文件(包括預處理文件(x.ii)、彙編代碼(x.s)、目標文件(x.o)和最終的可執行文件)

-I PATH //在PATH指定的目錄下尋找相關的include文件,參數中間不加空格
-lxx //其中xx爲指定函數庫,對於Linux環境下的函數庫,靜態庫後綴爲.a,動態庫後綴爲.so,一般庫名爲libxx.a或libxx.so,如加入libm.so庫,則使用參數-lm(去除lib和後綴.a\so)
-L PATH //在PATH指定的目錄下尋找相關的庫文件,即-lxx指定待鏈接的庫,-L指定尋找該庫的路徑。不指定時搜索默認的庫函數路徑。
-std=xx //指定編譯使用的語言標準
-x language //指定待編譯文件的語言,而不是由編譯器根據文件後綴自行判斷。即默認情況下gcc根據文件後綴判斷使用的編程語言。例如使用文件名hello作爲源文件名是不合適的,應使用hello.c

-Wall //輸出一些簡單的錯誤以及一些可能存在問題的警告
-Wextra //輸出-Wall不包含的警告等
-Werror //將警告視爲錯誤輸出

-Wl,option //通過該選項將參數 option 作爲後續鏈接器 ld 使用的參數
-Wl,rpath=/path/to/lib //爲鏈接器指定一個非默認的運行時庫的搜索路徑,運行採用了該選項編譯的程序時,鏈接器會在-rpath 指定的目錄中搜索所需的 so 庫文件,以將其載入內存中

-D name=definition //加入宏定義,若不指定def,則默認爲1
-O1、-O2 //規定編譯器的優化等級,優化級數越高執行效率一般越好,但是優化會改變原有程序結構,使得其彙編不易理解

//一些進行緩衝區溢出實驗時可能需要的選項
-fstack-protector\-fno-stack-protector //是否開啓堆棧保護,這裏的保護是在返回地址之前加入一個驗證值來確保返回地址不被破壞
-z execstack //啓用可執行棧,默認是禁用的
//(echo 0 >/proc/sys/kernel/randomize_va_space 關閉地址隨機化,這是一個單獨的命令,操作需要root權限)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章