關於Gdb工具的交叉編譯、移植

悟心成長發表於2020-11-14


前言

為了在arm-linux處理器上捕捉程式異常,除錯程式,需使用GDB工具,需要將gdb原始碼使用交叉編譯工具編譯成為可在arm處理器上執行的格式。需要的工具為交叉編譯工具鏈arm-none-linux-gnueabi-gcc 本人使用的是4.3.2版本交叉工具鏈。編譯中需要的依賴庫有termcap。

一、termcap庫的準備

termcap庫的下載地址:(https://mirrors.sjtug.sjtu.edu.cn/gnu/termcap/) 

我使用的是termcap1.3.1的庫,大家可以使用此庫使用交叉編譯工具編譯成為靜態庫為編譯gdb所依賴的庫。以下為編譯termcap的操作步驟。

tar -zxvf termcap1.3.1.tar.gz
cd  termcap1.3.1
./configure  --prefix=/home/termcap/
make 
make install

操作完上面的命令後會在我們定義的、home/termcap/中的lib中檢視到libtermcap.a庫。
注: 修改Makefile 中的CC = gcc 改為 CC = arm-linux-gcc AR = ar 改為 AR = arm-linux-ar 後再進行make 以及後面的操作

二、GDB的下載準備以及交叉編譯

1.下載gdb7.0解壓安裝

gdb原始碼下載地址:[gdb下載連結地址](ftp://sourceware.org/pub/gdb/releases/)

本人使用的是gdb7.0的版本進行的本次移植實驗。下載gdb7.0.tar.gz包後。我們進行如下的操作指令。

tar -zxvf gdb7.0.tar.gz
cd gdb7.0
./configure   --host=arm-none-linux-gnueabi CC=arm-none-linux-gnueabi-gcc CPP=arm-none-linux-gnueabi-g++ AR=arm-none-linux-gnueabi-ar --enable-shared --prefix=/home/gdb/ --without-x --disable-gdbtk --disable-tui --without-include-regex --without-include-gettext
 LDFLAGS="-L/home/termcap/lib" CPPFLAGS="-I/home/termcap/include"
 #配置生產Makefile

make CC=arm-none-linux-gnueabi-gcc CXX=arm-none-linux-gnueabi-g++ AR=arm-none-linux-gnueabi-ar

make install

/生成 Makefile
//–enable-shared:動態編譯
//–host=arm-linux:用 arm-linux-gcc 編譯
//–prefix=/usr/local/gdb 安裝目錄
//–without-x 取消 x windows 支援
//–disable-gdbtk 取消 gdbtk,應該也是圖形介面相關的
//–disable-tui 取消 tui 介面
//–without-included-regex 關閉正規表示式庫
//–without-included-gettext 去掉用於多語言處理的 gettext庫,正規表示式/gettext,暫時不需要,先去掉
//CPPFLAGS/LDFLAGS 是確保能找到 ARM 版的 termcap庫
:–build=編譯該軟體所使用的平臺、–host=該軟體將執行的平臺、
   --target=該軟體所處理的目標平臺 LDFLAGS代表gdb連結所依賴的庫,當需要依賴多哥庫時我們可以使用命令:LDFLAGS="-L/path1 -L/path2 -L/path3" CPPFLAGS是用的是包含的標頭檔案。

2.移植

在執行完成上面的操作後會生成,bin、lib、share的檔案將其移植在arm開發板上。然後就可以執行了。但是我在將此檔案移植到arm板上的時候發現沒執行的時候發現缺少libz.1.so的庫,因此需要libz的庫編譯移植在arm開發板中的lib中就可以了。或者執行前export LD_LIBRARY=“”路徑”即可。

3.交叉編譯libz庫

下載 zlib庫的地址:http://www.zlib.net/zlib-1.2.11.tar.gz
下載後進行解壓安裝等操作。如下的指令操作

tar -zxvf zlib-1.2.11.tar.gz
cd zlib-1.1.22
./configure --prefix=/hme/zlib
make 
make install

注:修改Makefile檔案中的cc=arm-none-linux-gnueabi-gcc ,LDSHARED=arm-none-linux-gnueabi-gcc後再執行make 等命令將生成的lib檔案移植在板卡的/lib目中


總結

以上是本人進行gdb交叉編譯的記錄,有不足之處望望指正。本文僅僅簡單介紹了gdb的交叉編譯以及移植,下一次寫一篇有關gdb除錯使用的文章。

相關文章