gcc -Wall [-I search_headfile_path] [-L search_lib_path] sourcefile -lNAME -o exe-nameshell
-Wall選項打開全部最經常使用到的編譯警告----推薦你老是使用該選項!
-I 擴展頭文件(Include)搜索路徑
-L 擴展庫文件(Library)搜索路徑
-lNAME 編譯器選項「-lNAME」試圖連接標準庫目錄下的文件名爲「libNAME.a」中的對象文件。ubuntu
另外的也能夠連接經過命令行或環境變量指定的目錄下的庫文件(見-L選項)。bash
其餘:
1.連接次序:
在類Unix系統上,傳統上編譯器和連接器搜索外部函數的次序是在命令行上指定的對象文件中從左到右的查找(不會回過頭再去找)。
這意味着,包含函數定義的庫文件、源文件、對象文件應該出如今使用該函數的庫文件、源文件、對象文件以後,不然將出現連接錯誤。函數
2.gcc搜索路徑
默認狀況下,gcc在下面目錄中搜索頭文件:
/usr/local/include/
/usr/include/
在下面目錄中搜索庫:
/usr/local/lib/
/usr/lib/
搜索頭文件的目錄列表常被稱爲include路徑,而搜索庫的目錄列表被稱爲搜索路徑或連接路徑。在這些路徑中的目錄是按次序搜索的,在上面的兩個列表中從第一個到最後一個。例如,「/usr/local/include」中找到的頭文件優先於「/usr/include」中的同名文件。相似的,「/usr/local/lib」中找到的庫優先於「/usr/lib」中的同名庫。命令行
3.gcc搜索路徑優先次序:
-I > 環境變量 > 標準目錄
-L > 環境變量 > 標準目錄調試
1. 從左到右搜索由命令行「-I」和「-L」指定的目錄
2. 由環境變量,好比C_INCLUDE_PATH和LIBRARY_PATH,指定的目錄
3. 默認的系統目錄
在平常的使用狀況中,一般用「-I」和「-L」選項把目錄添加到搜索路徑。對象
設置環境變量:
1> 修改.bash_profile文件(ubuntu爲.profile) 設置後,須要註銷,才能生效
2> 命令行(聲明環境變量$NAME,並export NAME)設置後,僅對當前會話有效內存
4.共享庫與靜態庫編譯器
在絕大部分系統上gcc編譯程序時默認連接到共享庫。使用選項「-lNAME」的狀況下連接靜態庫。「libNAME」能夠用於連接,但編譯器首先會檢查具備相同名字和「.so」爲擴展名的共享庫。當啓動可執行文件時,載入器爲了把共享庫載入內存,必須先找到它。默認狀況下,載入器僅在一些預約義的系統目錄中查找共享庫,好比「/usr/local/lib」和「/usr/lib」。若是庫不在這些目錄中,那它必須被添加到載入路徑(load path)中去。it
設置載入路徑的最簡單方法是經過環境變量LD_LIBRARY_PATH。
使用「-static」選項能夠迫使gcc靜態連接,避免使用共享庫:
$ gcc -Wall -static -I/opt/gdbm-1.8.3/include/ -L/opt/gdbm-1.8.3/lib/ dbmain.c -lgdbm
5.預處理:
「-DNAME」選項在命令行上定義預處理宏NAME。
「-D」命令行選項能夠用來定義有值的宏,形式是「-DNAME=VALUE」。
「-E」選項,能夠直接看到預處理器對源代碼處理後的效果。
「-save-temps」 選項除了保存預處理過的「.i」文件外,還會保存「.s」的彙編文件和「.o」的對象文件。
6.帶調試信息進行編譯:
GCC提供了「-g」調試選項來在對象文件和可執行文件中存儲另外的調試信息。方便gdb
等調試器跟蹤。
GNU Bash shell中,命令ulimit –c能夠控制設定core文件的最大值。若是這個限定值是零,則不會生成core文件。
$ ulimit -c unlimited #擴大core文件的大小限制,以便容許寫入任何大小的core文件