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權限)

轉自https://www.cnblogs.com/yhjoker/p/7533438.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM