編譯GDB 主要針對LINUX平台

2021-06-20 09:13:09 字數 3109 閱讀 6467

teawater@hellogcc
一. 取得原始碼

3.版本控制工具來取得**。gdb官方的版本控制使用的cvs,你可以用:

cvs -z9 -d :pserver:[email protected]:/cvs/src co gdb

取得最新的gdb**,而在取得原始碼用目錄中用:

cvs update

就可以更新原始碼。

gdb也提供了git映象:

git clone git:

取得最新的gdb**,而在取得原始碼用目錄中用:

git pull

就可以更新原始碼。

二.基本編譯

編譯之前請安裝texinfo,libncurses5-dev, m4, flex 和 bison這5個包。

最基本的gdb編譯非常簡單,和編譯大部分軟體一樣。

建立乙個用來編譯gdb的目錄:

mkdir bgdb

進入這個目錄:

cd bgdb

config,其中../gdb/

是gdb原始碼的目錄:

../gdb/configure

然後就是編譯:

make

編譯後安裝:

make install

其中比較關鍵的地方就是config,其決定了後面編譯出什麼樣的gdb。

如果想設定編譯好的gdb到乙個指定目錄,可以用:

../gdb/configure --prefix=$home

使用這個configure,可以讓gdb安裝到當前使用者的home目錄。

也可以在編譯的時候指定cflags,可以用:

../gdb/configure cflags=-g

使用這個configure,編譯出的gdb沒有開啟o2選項。

三.編譯支援其他體系結構的gdb

前面介紹的config方式都是編譯當前體系結構的,有時候我們需要在本機(x86)上跑乙個支援別的體系結構的gdb,這樣可以分析那個平台的二進位制檔案,core檔案以及對那個平台的的程式進行遠端除錯。可以這樣用:

../gdb/configure --target=amd64-linux

這樣編譯出的gdb就可以支援amd64的gdb,編譯安裝的時候,gdb的執行檔案會被命名為amd64-linux-gdb。

但是這樣編譯會有個小問題,如果需要使用多個體繫結構的gdb,則需要每個平台都編譯乙個gdb,這有點麻煩,所以我比較喜歡使用的是另一種方法配置:

../gdb/configure --enable-targets=all --enable-64-bit-bfd

這樣的gdb可以直接支援了全部他可以支援的體系結構和檔案結構。

其中--enable-targets=all是讓gdb開啟對所有體系結構支援。

而--enable-64-bit-bfd是設定bfd為64位模式,這樣才能支援64位的二進位制檔案比如說amd64,不過比較新的bfd中,當設定的target是64位或者開啟--enable-targets=all的時候,不需要設定會自動開啟這個選項,不過保險起見還是開啟。

這樣編譯出的gdb就能支援gdb支援的全部體系結構了。

當然用起來有個問題就是,因為支援的體系結構太多,可能有一些二進位制檔案會同時符合若干種格式,開啟這類檔案的時候gdb會顯示:

"***": not in executable format: file format is ambiguous.

matching formats: elf32-bigmips elf32-bigmips-vxworks elf32-tradbigmips.

use "set gnutarget format-name" to specify the format.

這時你就可以根據提示,用set gnutarget format-name從列表中選擇正確的格式,然後再用file命令開啟這個檔案,就可以了。

四.交叉編譯

如果想在本地編譯乙個gdb而要在其他體系結構的平台上下使用,首先需要本地交叉編譯環境可用,可以編譯出可以在目標平台上執行的可執行檔案,然後:

../src/configure --host=mips64-linux --enable-64-bit-bfd

cc=mips64-linux-gcc ld=mips64-linux-ld ar=mips64-linux-ar

這樣gdb就能編譯出乙個可以在mips64-linux上使用的gdb。

五.cvs update -d

前面提過更新cvs目錄,要使用cvs update,而cvs update

-d是不建議使用的命令,因為當增加-d選項的時候,cvs會把原始碼倉庫中所有檔案都取回來,完成後src目錄中不光有原來的目錄,還增加了binutils,tk,

ld 等一大堆其他軟體的目錄。

如果你希望同時使用sourceware裡面這些軟體的最新版本,你可以使用這個原始碼樹,如果你不想使用這樣的原始碼樹,則請直接看下一節。

我對這個目錄建議的配置是:

../gdb/configure --disable-sid --disable-rda --disable-gdbtk

--enable-targets=all --enable-64-bit-bfd

其中--enable-targets=all --enable-64-bit-bfd上一節已經介紹過,不再介紹。

--disable-sid --disable-rda禁止了2個不太常用且編譯比較慢的軟體。

--disable-gdbtk禁止了gdb圖形擴充套件insight的編譯,其實這個軟體還是相當好用的,

這個圖形擴充套件可以同時開啟命令列,看原始碼的時候還能隨時切換成彙編。但其有乙個問題
是跟gdb原始碼的聯絡其實非常緊密,一旦gdb一些原始碼作了更新,其的編譯就會受到影響,
再加上維護者不多,所以一旦編譯不過就需要等上幾天,這種情況一年能碰上幾次,機率也
不算很高。當然如果不介意的話,可以在config的時候去掉--disable-gdbtk,
並安裝包libx11-dev,編譯如果發現問題可以報到郵件列表[email protected]
這樣開發者可以更快的修復問題。

六.寫在最後

前面介紹過的config引數可以同時使用,大家可根據需要靈活組合。

交叉編譯GDB

gdb是一款強大的除錯工具,不多介紹了 解壓檔案tar xf gdb 7.9.tar.gz配置編譯 編寫編譯指令碼 bin bash configure cc opt mipsel gcc472 glibc216 mips32 bin mipsel linux gcc enable static c...

OpenResty原始碼編譯安裝 Linux

configure prefix usr local openresty with luajit with http ssl module user root group root with http realip module add module bundle ngx cache purge 2...

PMP考試主要針對什麼行業?

pmp認證在國內的背景 隨著國家經濟建設從基礎設施轉向高階產業以及市場專案規模擴大,投資額度上公升,在專案中對專案管理者的要求也越來越高,國內科技的發展,企業擴充套件專案管理人才時的要求也會隨之提高,這時候很需要競爭力,不管是做專案管理年限 做過的專案管理成果還是獲取pmp認證又能大大的提高自己的競...