我有libstdC++和libc等調試版本,並希望鏈接它們。它們位於/ usr/lib/debug中,而不是/ usr/lib。有任何想法嗎?如何告訴gcc(或ld)與標準c和C++庫的調試版本鏈接
4
A
回答
4
假設Linux的,
- 靜態庫:添加一個
-L/usr/lib/debug
到鏈接器的命令行。gcc
/ld
將在默認系統目錄之前看起來那裏。使用ldd
命令驗證是否鏈接了正確的庫版本(僅限共享庫)。 - 共享庫:設置
LD_LIBRARY_PATH=usr/lib/debug
,並且即使沒有第1步,您的應用程序也會從該庫中選取庫,只要存在庫的一個版本,如果您使用發行版的包管理器進行安裝,則很可能會發生這種情況。
儘管這樣做是一個好主意,但是,因爲有些圖書館可能只有靜態形式。
0
使用鏈接器標誌。 ld/gcc-L<LIBRARY_PATH>
僅對鏈接時間很重要,無論共享還是靜態,如果鏈接程序找不到它,則無法鏈接到庫。
對於共享庫環境變量LD_LIBRARY_PATH
對啓動時間很重要。動態庫加載程序ld.so和ld-linux.so將在您啓動應用程序時在那裏查找。
3
我相信接受的答案是誤導的,在/usr/lib/debug
庫不編譯(-g -O0 ...)庫的版本/lib
,/usr/lib
但/lib
從相應的庫剝離簡單調試符號調試, /usr/lib
。請參閱How to use debug version of libc和How 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
的.text
段ALLOC
但沒有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
相關問題
- 1. 如何告訴GCC鏈接C標準庫,而不是C++標準庫?
- 2. 如何調試鏈接過程 - GCC/ld - STL C++
- 3. 如何鏈接到特定版本的標準庫(使用gcc)
- 4. 哪個gcc和g ++版本支持c和C++的標準?
- 5. C++標準庫鏈接與不同的C++標準
- 6. printf和memcpy鏈接到標準C庫
- 7. 鏈接失敗與gcc 4.8.2/ld 2.24,成功與gcc 4.4.7/ld 2.20
- 8. 將調試版本鏈接到版本庫:警告LNK4204
- 9. FMI - C標準庫版本差異導致鏈接錯誤
- 10. GCC-ld不鏈接opengl
- 11. c和C++與庫的鏈接
- 12. visual studio如何告訴C++和c?
- 13. C++鏈接器 - g ++如何獲取ld
- 14. GCC和LD鏈接有什麼區別?
- 15. LD:與STL庫鏈接
- 16. C++調試版本
- 17. 如何將C++靜態庫與依賴於標準庫的XCode鏈接起來?
- 18. 如何告訴「gmake」使用其他版本的GCC? (Linux)
- 19. 無法鏈接共享庫與-mx32和gcc 4.7或gcc 4.8
- 20. 用MinGW32 GCC編譯。只告訴鏈接庫一次?
- 21. 想要一個新版本的GCC與As,LD和AR
- 22. 如何調試像printf這樣的標準c庫函數?
- 23. C標準庫和系統調用
- 24. 「gcc鏈接」和「ld鏈接」之間有什麼關係?
- 25. MacOS - 如何使用gcc/ld鏈接動態庫與相對路徑
- 26. 的Xcode 8.3.3,鏈接框架與發佈和調試版本
- 27. 獲取Windows版本與gcc c + +
- 28. 我可以告訴gcc/ld排除未使用的模塊嗎?
- 29. xcodebuild和C標準庫
- 30. gcc ld:確定靜態庫的鏈接順序的方法
這工作,但我想我必須改變,以獲得調試共享庫加載LD_LIBRARY_PATH,對不對? – 2010-07-04 19:13:06
@Jonathan Fischoff,如果你正在鏈接共享庫,是的。 – 2010-07-04 22:59:29