一、GCC編譯器和常用命令
gcc編譯器不僅支持c語言,還支持Ada、C++、Objective-C語言。一般編譯的過程可以分爲四個階段:預處理(Preprocessing)、編譯(Compilation)、彙編(Assembly)和連接(Linking)
1、 一步到位的編譯指令
包含四個階段
gcc test.c –o test
2、 預處理
將頭文件內容插入到test.c文件,-E是預處理結束後停止,並輸出預處理結果
gcc –E test.c –o test.i
3、 編譯
對.i文件編譯,生成彙編代碼,-S表示生成彙編代碼後停止,-o輸出彙編代碼文件
gcc –S test.i –o test.s
4、 彙編
將彙編代碼文件編譯爲目標文件
gcc –c test.s –o test.o
5、 連接
將其與C標準輸入輸出庫進行連接,最終生成程序test
gcc test.o –o test
6、 執行
在命令行窗口,執行./test
不同文件代表的意義:
test.c(源文件)->test.i(-E預處理後文件)->test.s(-S彙編文件)->test.o(-c目標文件)->test(-o可執行文件)
對於多個源文件進行編譯:
1、 一步到位
gcc test1.c test2.c –o test
2、 複雜一些的(執行過程和一步到位的是一樣的,都是預處理->編譯->連接)
gcc -c test1.c -o test1.o
gcc -c test2.c -o test2.o
gcc test1.o test2.o -o test
常用命令選項的意義:
1、-c 只編譯不連接
2、-O 優化編譯後的代碼,後面加數字代表優化級別
3、-o 指定輸出的文件名
4、-v 顯示編譯過程中每一步用到的命令
二、objdump命令的使用
objdump是Linux下面的反彙編目標文件或者可執行文件的命令
1、objdump –d test
反悔表test中需要執行指令的那些section
2、 objdump –h test
顯示test的Section Header信息
3、 objdump –S test.o
輸出C源代碼和反匯編出來的指令對照的格式
4、 objdump –h
顯示目標文件各個section的頭部摘要信息
5、 objdump –r
顯示文件的重定位入口
6、 objdump –t顯示文件的符號表入口
三、file命令
file命令是檢測文件類型的命令,可以讀取文件的編碼體系以及一些其他信息