關於Gdb工具的交叉編譯、移植
前言
為了在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除錯使用的文章。
相關文章
- GDB交叉編譯編譯
- 實現交叉編譯gdb和gdbserver(gdb-7.6)編譯Server
- ubuntu下編譯交叉編譯工具鏈Ubuntu編譯
- cmake使用教程(九)-關於安卓的交叉編譯安卓編譯
- Go語言交叉編譯工具goxGo編譯
- 製作交叉編譯工具鏈概述編譯
- 交叉編譯工具鏈構建原理編譯
- 交叉編譯編譯
- 全網可用交叉編譯工具鏈大全編譯
- lazarus交叉編譯編譯
- golang交叉編譯Golang編譯
- 編譯器的自展和自舉、交叉編譯編譯
- 交叉編譯入門編譯
- go 交叉編譯,部署Go編譯
- 淺談交叉編譯編譯
- 嵌入式GDB除錯Linux C程式或交叉編譯(開發板)除錯LinuxC程式編譯
- 關於庫的編譯編譯
- 交叉編譯和 RPC編譯RPC
- wifidog交叉編譯WiFi編譯
- android NDK 交叉編譯Android編譯
- golang初學:交叉編譯Golang編譯
- protobuf 的交叉編譯使用(C++)編譯C++
- Android NDK 提供的交叉工具鏈手動編譯原始碼Android編譯原始碼
- bluez藍芽協議棧交叉編譯移植教程(附帶視訊下載地址)藍芽協議編譯
- 09_QT系統移植之交叉編譯QT原始碼和觸控原始碼QT編譯原始碼
- Rust 交叉編譯與條件編譯總結Rust編譯
- 交叉編譯-Mac環境使用NDK編譯FFmpeg編譯Mac
- C編譯: 使用gdb除錯編譯除錯
- C 編譯: 使用 gdb 除錯編譯除錯
- 使用gdb編譯除錯mysql編譯除錯MySql
- Go跨平臺交叉編譯Go編譯
- linux與windows交叉編譯LinuxWindows編譯
- 交叉編譯mupdf1.15.0編譯
- Go - armv7 交叉編譯Go編譯
- Ubuntu交叉編譯環境配置Ubuntu編譯
- 交叉編譯和交叉除錯環境搭建及使用編譯除錯
- 關於gdb斷點的真相斷點
- 從零開始移植QT4.8.5之三--linux下交叉編譯QT執行庫QTLinux編譯