2012年1月18日 星期三

自行編譯含 debug symbol 的套件 (package)

對函式庫 X 來說

  • X-dev 表示讓開發者用的, 有裝 header、文件之類的
  • X-dbg 內容類似 X, 不過有留 debug symbol

比方說 libjpeg, 三種的描述如下:

  • libjpeg62 - The Independent JPEG Group's JPEG runtime library
  • libjpeg62-dbg - Development files for the IJG JPEG library
  • libjpeg62-dev - Development files for the IJG JPEG library

裝了 X-dbg 後什麼事也不用做, gdb 自己會優先用含 debug symbol 的版本。不過若官方沒提供供 X-dbg 的話, 就得自己編。參考官方文件《HowToGetABacktrace - Debian Wiki》, 做法如下:

  • $ apt-get install build-essential fakeroot gdb
  • $ apt-get build-dep X
  • $ DEB_BUILD_OPTIONS="nostrip noopt" fakeroot apt-get -b source X
  • $ dpkg -i X.deb

針對上述指令, 補充幾點

  • 編好套件後, 可用 dpkg -c X.deb 先看裡面裝了什麼
  • 用 objdump --source FILE 查看裡面有沒有含程式碼, 有的話才表示確實有含 debug symbol。這個作法比用 file FILE 看是否有 strip 更確實。二進位檔有可能沒含 debug symbol 也沒 strip。

2016/02/16 更新

遇到 "trying to overwrite ..." 的錯誤 時,可以用 sudo dpkg -i --force-overwrite X.deb 強制安裝。

沒有留言:

張貼留言

C++ 能否用 memcpy 複製 class / struct 的資料?

答案是: POD (plain old data) type 可以。POD type 可和 C 互通, CPP Reference POD Type 的介紹: Specifies that the type is POD (Plain Old Data) type. Thi...