我有一个小的开源程序,可以作为apache的共享模块进行编译,但是当apache尝试加载它时,它拒绝加载,并抱怨:“未定义符号:ap_log_rerror”。
在共享库上运行ldd
会生成大约十二个依赖项的列表,因此我知道这些函数未定义。我如何找到哪个库提供此功能?
我的问题不是如何列出符号-我知道如何使用nm。我的问题是在哪里可以找到包含我想要的符号的文件?有什么有效,简便的方法来识别正确的文件?
更新:我通过重新编译程序来解决此问题。因此,尽管我的核心问题仍未得到解答,但现在可以加载。
答案 0 :(得分:0)
我可能知道你的意思。在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