我有一些C++代碼,內部使用多個第三方庫。代碼編譯良好,但在執行過程中無法加載某些共享庫(libintbasic.so)。考慮到這種情況,我無法在系統中安裝任何庫,唯一的出路是找到哪個函數調用該庫。我怎麼能找到誰叫這個庫(我的代碼不直接調用這個庫)。如何查找誰在調用共享庫函數?
1
A
回答
0
1
我不能任何庫安裝到系統中,
這似乎是一個虛假的要求:明確您可以將二進制文件複製到系統中。將其他庫安裝到同一個目錄並不困難。
我怎麼能發現誰在呼叫該庫
有兩種情況考慮:
- 二進制文件或庫之一,它直接鏈接到鏈接
libintbasic.so
。您的二進制文件不會運行或 - 您的二進制文件或與其直接鏈接的庫之一調用
dlopen("libintbasic.so",...)
,並且在dlopen
失敗時失敗。
通過設置LD_DEBUG=files,libs
來調試第一個案例通常是最容易的。動態加載器會告訴你哪些庫正在被加載,以及爲什麼需要它們。
調試第二種情況是容易gdb
:設置dlopen
斷點,並執行每次命中斷點時where
和info shared
命令。
相關問題
- 1. 在JNI共享庫中查找函數?
- 2. 如何從共享庫調用函數?
- 3. 如何從共享庫調用函數
- 4. 找出函數是否在共享庫中調用
- 5. 如何在共享庫中使用Lua調用函數
- 6. 從共享庫中調用函數
- 7. 如何在Go中調用Linux共享庫函數?
- 8. 查找共享庫libOS.so
- 9. Google雲端硬盤 - 如何查找文檔與誰共享?
- 10. 如何在程序中檢查共享庫暴露函數
- 11. 如何檢查誰在使用共享文件
- 12. 如何從asp.net中的公共共享函數調用公共函數?
- 13. 如何使用CMake指定在哪裏查找共享庫?
- 14. 函數在一個共享庫中調用另一個共享庫中的函數
- 15. VB網絡:如何調用這個公共共享函數?
- 16. 共享庫函數沒有在lolipop中調用
- 17. 調用@plt函數時在dlopen/static init上共享庫SIGSEGV
- 18. 如何使用LLVM API在函數中找出共享變量?
- 19. 如何查看Linux共享庫導出的函數列表?
- 20. 如何查詢誰在Windows上共享端口80?
- 21. 如何使用共享庫函數在gdb中設置斷點
- 22. 如何檢查誰在PHP中調用函數?
- 23. 如何調用函數在共享服務 - SailsJS
- 24. 共享庫(.so)如何調用在其加載程序中實現的函數?
- 25. 不調用共享構造函數的共享方法
- 26. 從Ruby調用共享庫
- 27. Facebook - 檢查誰共享鏈接
- 28. 調用共享.so中的函數C
- 29. sprof如何找到我的共享庫
- 30. 如何調用其名稱作爲參數的共享函數
使用調試器查找導致調用的行。 – user2079303
你可能想要添加「linux」標籤 –