ELF:链接:为什么我在.so文件中获得未定义的引用

Mil*_*red 7 c++ linker symbols shared-libraries elf

我正在尝试构建针对wxWidgets的程序,并且我收到链接器错误.我想真正理解它的含义.错误是:

/usr/lib/libwx_baseu-2.8.so: undefined reference to `std::ctype<char>::_M_widen_init() const@GLIBCXX_3.4.11'
Run Code Online (Sandbox Code Playgroud)

我不明白的是错误的原因libwx_baseu-2.8.so.我认为.so文件的所有符号都已解析,与.o仍需要链接的文件相反.

当我ldd.so,我得到能够解决所有的链接库,所以有没有问题:

$ ldd /usr/lib/libwx_baseu-2.8.so
 linux-gate.so.1 =>  (0x00476000)
 libz.so.1 => /lib/libz.so.1 (0x00d9c000)
 libdl.so.2 => /lib/libdl.so.2 (0x002a8000)
 libm.so.6 => /lib/libm.so.6 (0x00759000)
 libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x002ad000)
 libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x0068d000)
 libpthread.so.0 => /lib/libpthread.so.0 (0x006f0000)
 libc.so.6 => /lib/libc.so.6 (0x00477000)
 /lib/ld-linux.so.2 (0x007f6000)
Run Code Online (Sandbox Code Playgroud)

这是否意味着.so文件未正确编译(在这种情况下,它是我的分发包中的错误)或者是否意味着我的特定程序的链接器命令行上缺少库?

另外,您知道如何在ELF文件中获取未定义符号的列表.我试过readelf -s但我找不到丢失的符号.

谢谢.

米尔德里德

Ser*_*kov 7

I thought that .so files had all its symbols resolved, contrary to .o files that still need linking.

共享库可能不完整,没关系.

do you know how I can get a list on undefined symbols in an ELF file

使用

nm -C -u libwx_baseu-2.8.so


Dmi*_*kov 4

我认为您在链接程序时没有链接到某些库。

您应该在程序中链接到您在 .so 中链接到的所有共享库

如果 .so 链接到某些静态库 - 如果在 .so 中找到了所有需要的符号,则程序中不需要链接到它们

您可以使用nmlinux命令查看目标文件、库或二进制文件中的符号

编辑
您的具体问题可以在这里描述:http://old.nabble.com/-Bug-49433--gcc4.4,-NEW :-gcc4.4-misses-std::endl-implementation-at--O2 %2B-td22836171.html