我刚刚在Ubuntu上构建了一个共享库,当我尝试使用该函数时,加载库的应用程序报告未找到'xxx'符号。
我想检查(即列出)我的库导出的功能,以便我可以进一步调查此问题。
相关细节:
操作系统:Ubuntu 9.10 编译器:gcc 4.4.1 链接器:GNU ld 2.20
答案 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)手册页。