gcc/g++編譯器的安裝與說明
1.gcc/g++編譯器的安裝
使用yum進行安裝需要進入root用戶
gcc yum install gcc
g++ yum install gcc-c++
2.gcc/g++的作用
將c/c++源代碼編譯成機器可識別的代碼(指令)
3.編譯過程
預處理 通過預處理指令所包含的文件內容插入程序中(展開源文件的所有代碼)
gcc -E test.c -o test.i 產生一個預處理后的文件( .i文件 )
編譯 語法語義糾錯,調用匯編程序生成成匯編代碼
編譯時指定源程序,不用任何選項,會默認生成一個a.out文件
gcc -S test.i -o test.s 產生一個匯編程序文件( .s文件 )
匯編 將匯編代碼翻譯成機器所能識別的二進制指令
gcc -c test.s -o test.o 產生一個目標文件( .o文件)
鏈接 鏈接庫,將所有代碼合到一起生成可執行文件
gcc test.o -o test 產生一個可執行文件
鏈接分為靜態鏈接和動態鏈接:
靜態鏈接:需要在鏈接后添加" -static ",將所有的代碼包括標准庫的實現全部鏈接到可執行文件中;
缺點:冗余度大,編譯出來的文件比較大
動態鏈接:在可執行文件中只保存所需使用的函數的符號,符號表;
優點:可執行文件小,各個模塊處於解耦狀態,且代碼復用性高
gcc默認的鏈接方式為動態鏈接
4.gcc/g++的區別與聯系
1>對於*.c文件,gcc會將它當成c程序,而g++會將它當成cpp程序
2>對於*.cpp文件,gcc與g++都會當它為cpp程序
3>cpp編譯階段,g++會調用gcc
4>cpp鏈接階段,通常會用g++來完成,因為gcc命令不能自動與cpp程序使用的庫鏈接
5.gcc編譯器常用選項
-c 只生成目標文件(*.o文件),不鏈接
-E 只進行預處理,不編譯,生成預處理后的(*.i)文件
-S 生成匯編文件(*.s)文件
-o 指定輸出的可執行文件名稱
-g 在編譯過程中產生調試信息
-w 禁止警告,有時會隱藏程序中的錯誤
-W 給出額外更詳細的警告
-Wall 給出所有有用的警告信息,有利於排查問題