簡體   English   中英

如何確定符號在(linux)中定義的庫

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM