c++ - ELF:链接:为什么我在 .so 文件中得到 undefined reference

标签 c++ linker shared-libraries symbols elf

我正在尝试构建一个针对 wxWidgets 的程序,但出现链接器错误。我很想真正理解这意味着什么。错误是:

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

我不明白的是为什么错误在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)

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

此外,您知道我如何获得 ELF 文件中 undefined symbol 的列表吗?我尝试了 readelf -s 但找不到丢失的符号。

谢谢。

米尔德里德

最佳答案

我认为 .so 文件的所有符号都已解析,与仍然需要链接的 .o 文件相反。

共享库可以不完整,这没关系。

你知道我如何获得 ELF 文件中 undefined symbol 的列表吗

使用

nm -C -u libwx_baseu-2.8.so

关于c++ - ELF:链接:为什么我在 .so 文件中得到 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2643738/

相关文章:

python - OSError : libtest. 所以: undefined symbol :g_tree_new

gcc - 我如何使用 objdump 之类的工具判断目标文件是否已使用 -fPIC 构建?

c++ - minwindef.h 中的 IN 和 OUT 宏

c++ - 了解 `std::is_move_constructible`

c++ - 如何用 C 语言实现基于 xml 的结构化语言的解析器?

c - 将目标文件与在具有不同对齐限制的体系结构上编译的结构访问链接

C++ 纯虚错误

gcc/g++ 参数顺序

visual-studio - 在 Visual Studio 2003 中指定 PDB 路径

c - 如何找出库中缺少的函数,但哪些函数存在于与库一起发布的公开头文件中?