繁体   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