如何在Ubuntu上的共享库中列出导出的函数

时间:2010-02-16 16:53:38

标签: c++ ubuntu linker

我刚刚在Ubuntu上构建了一个共享库,当我尝试使用该函数时,加载库的应用程序报告未找到'xxx'符号。

我想检查(即列出)我的库导出的功能,以便我可以进一步调查此问题。

相关细节:

操作系统:Ubuntu 9.10   编译器:gcc 4.4.1   链接器:GNU ld 2.20

3 个答案:

答案 0 :(得分:27)

尝试使用nm实用程序。

  

GNU nm列出了来自对象的符号   文件objfile ....如果没有对象文件   被列为参数,nm假设   文件a.out。 [reference]

答案 1 :(得分:20)

nm -D -C -g <library>

效果也不错。

答案 2 :(得分:2)

您的共享库是在库加载路径中还是在应用程序的运行时搜索路径中?听起来动态链接器无法找到您的库。尝试在您的应用程序上运行ldd以查看是否可以在运行时找到该库,例如

$ ldd /usr/bin/less
    linux-gate.so.1 =>  (0x0072a000)
    libncurses.so.5 => /lib/libncurses.so.5 (0x00c68000)
    libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x007c7000)
    libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0x00286000)
    /lib/ld-linux.so.2 (0x002a1000)

有关库搜索路径的其他详细信息,请参阅ld.so(8)手册页。