2010-07-02 83 views

回答

4

假設Linux的,

  1. 靜態庫:添加一個-L/usr/lib/debug到鏈接器的命令行。 gcc/ld將在默認系統目錄之前看起來那裏。使用ldd命令驗證是否鏈接了正確的庫版本(僅限共享庫)。
  2. 共享庫:設置LD_LIBRARY_PATH=usr/lib/debug,並且即使沒有第1步,您的應用程序也會從該庫中選取庫,只要存在庫的一個版本,如果您使用發行版的包管理器進行安裝,則很可能會發生這種情況。

儘管這樣做是一個好主意,但是,因爲有些圖書館可能只有靜態形式。

+0

這工作,但我想我必須改變,以獲得調試共享庫加載LD_LIBRARY_PATH,對不對? – 2010-07-04 19:13:06

+0

@Jonathan Fischoff,如果你正在鏈接共享庫,是的。 – 2010-07-04 22:59:29

0

使用鏈接器標誌。 ld/gcc-L<LIBRARY_PATH>僅對鏈接時間很重要,無論共享還是靜態,如果鏈接程序找不到它,則無法鏈接到庫。

對於共享庫環境變量LD_LIBRARY_PATH對啓動時間很重要。動態庫加載程序ld.sold-linux.so將在您啓動應用程序時在那裏查找。

3

我相信接受的答案是誤導的,在/usr/lib/debug庫不編譯(-g -O0 ...)庫的版本/lib/usr/lib/lib從相應的庫剝離簡單調試符號調試, /usr/lib。請參閱How to use debug version of libcHow to link against debug versions of libc and libstdc++ in GCC?的更多詳細信息的解釋。

行情:

/usr/lib/debug庫不是真正的圖書館。相反,只包含調試信息,但不包含真正的libc.so.6的的.text也不.data部分

在許多Linux安裝調試庫不包含真正的代碼;它們只包含調試信息。兩者是分開的,這樣如果你不需要它們,並且你缺少磁盤空間,你可以選擇不安裝它們,但是調試庫本身並不好。

檢查一下:

objdump -h /usr/lib/debug/lib/x86_64-linux-gnu/libc-2.19.so | grep -C1 text 
11 .text   001488a3 000000000001f520 000000000001f520 000002b4 2**4 
        ALLOC, READONLY, CODE 

.textALLOC但沒有CONTENTS。在/lib/x86_64-linux-gnu/libc-2.19.so相應的庫比較:

$ objdump -h /lib/x86_64-linux-gnu/libc-2.19.so | grep -C1 text 
11 .text   001488a3 000000000001f520 000000000001f520 0001f520 2**4 
        CONTENTS, ALLOC, LOAD, READONLY, CODE