GCC 編譯命令GUN工具鏈的使用

2021-08-29 02:19:25 字數 1075 閱讀 1390

binutils原始碼工具包中的常用命令:

gcc g++ ld ldd  nm strings   readelf addr2line strip 

objcopy as ar gdb

1、gcc/g++編譯器

示例:gcc -c test.c

gcc -o test test.c

gcc -e -o test.i test.c

gcc -g -o test test.c

2、addr2line  把程式位址轉換為檔名和行號,需要編譯時加-g

示例:addr2line a.out -a 804854c

3、ar 打包提取歸檔檔案

ar rv libtest.a test.o

4、as gcc用來輸出彙編檔案,產生目標檔案由聯結器ld鏈結

示例:gcc -s tty.c -o tty.s

as -o tty.o tty.s

5、nm 檢視匯出符號,列出目標檔案的符號

示例:nm -o libtest.so

6、objcopy 檔案格式轉換

7、objdump 反編譯

示例:objdump -t libtest.so

objdump -d a.out

7、ranlib產生歸檔檔案索引,並將其儲存到這個歸檔檔案

8、readelf 顯示elf格式可執行檔案資訊

示例:readelf -h a.out 

9、size 列出目標檔案每一段的大小以及總體大小

示例:size a.out   

10、strings 列印目標檔案中的可列印字元

示例:strings /lib64/libc.so.6 | grep glibc_

11、strip 丟棄目標檔案中的全部或特定符號,減少體積

示例:strip a.out

12、ldd  用於判斷某個可執行的elf檔案引用什麼動態庫

示例:ldd -v libtest.so

13、檢視so匯出函式

nm -d 7z.so

objdump -tt 7z.so

GCC編譯工具鏈

編譯過程控制 e 預處理,會呼叫cpp預處理器,但不生成檔案。gcc e main.c o main.i c 預處理時,不刪除注釋資訊 s 生成彙編檔案,gcc合併預編譯和編譯,呼叫ccl程式完成 c 將原始檔編譯成目標檔案,但是不鏈結,呼叫彙編器as o 輸出目標名稱,gcc預設編譯出來的檔案是a...

編譯gcc時關於工具鏈的調整

specs dirname gcc print libgcc file name specs gcc dumpspecs sed e s lib 64 ld tools g e cpp specs echo new specs file is specs unset specs 再設定成預設值 gc...

GCC 的編譯過程及編譯工具

nasm的安裝與使用 總結本文講解了gcc的編譯過程,預處理 編譯 彙編和連線。還有編譯工具nasm的使用。include intmain void 預處理語句 gcc e hello.c o hello.ihello.i檔案內容 gcc s hello.i o hello.shello.s檔案內容...