[英]How to determine which library a symbol is defined in (linux)
我有一個小的開源程序,它編譯為 apache 的共享模塊,但是當 apache 嘗試加載它時,它拒絕加載,抱怨:“未定義符號:ap_log_rerror”。 在共享庫上運行ldd
生成一個包含大約十幾個依賴項的列表,所以我知道這些依賴項沒有定義函數。 我如何去尋找哪個庫提供了這個功能? 我的問題不是如何列出符號 - 我知道如何用 nm. 我的問題是在哪里可以找到包含我想要的符號的文件? 是否有任何有效、簡單的方法來識別正確的文件?
更新:我通過重新編譯我的程序解決了這個問題。 所以它現在加載,盡管我的核心問題仍未得到解答。
我可能知道你的意思。 在 Windows 上,我們可以使用“dumpbin /ALL [executable]”來獲取所有可用信息(參見dumpbin ),其中包括可執行文件的符號定義位置的信息(參見下文),但我在Linux。
ksh-3.2$ dumpbin /ALL test.exe > all.sym
ksh-3.2$ sed -n "3155,3172p" all.sym
api-ms-win-crt-heap-l1-1-0.dll
14000E1D8 Import Address Table
14000E730 Import Name Table
0 time date stamp
0 Index of first forwarder reference
8 _callnewh
19 malloc
18 free
16 _set_new_mode
api-ms-win-crt-math-l1-1-0.dll
14000E2B0 Import Address Table
14000E808 Import Name Table
0 time date stamp
0 Index of first forwarder reference
9 __setusermatherr
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.