函数如何在nm中同时显示为“ T”和“ U”?

时间:2019-08-19 10:23:20

标签: compiler-errors linker nm gnu-toolchain

如主题行中所述,我能够在libz.a静态库中看到某些函数同时显示为“ T”和“ U”。当没有可用的定义时,符号将显示为“ T”,而没有可用的定义时,符号将显示为“ U”。

这可能是编译器/链接器中的错误吗?

我可以找到类似的question,其中两个c ++ API之间有明显的区别。就我而言,符号名称完全没有区别。因此,这肯定是另一个问题。

完全问题错误:

在编译kernel-module-devel时,我面临以下错误。

LINK     /tmp/_build/usr/src/module-headers/pc64-stable-build/tools/objtool/objtool /usr/bin/ld: /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/libelf.a(elf_compress.o): 
in function '__libelf_compress': (.text+0x11f): undefined reference to `deflateInit_'

deflateInit_是在zlib中提供的,当我这样做时,

nm /usr/lib64/libz.a | grep -i 'deflateinit_'
00000000000035a0 T deflateInit_
                 U deflateInit_
  • 谁将库中的符号更新为“ T”或“ U”?
  • 如何在“ T”和“ U”中同时显示符号?
  • 我该如何以更简洁的方式解决此问题?

有关我的工具链的一些信息对您有帮助:

$ ldd --version ldd(GNU libc)2.28 $ ld -v GNU ld版本2.31.1-25.fc29 $ gcc -v gcc版本8.3.1 20190223(Red Hat 8.3.1-2)(GCC)

0 个答案:

没有答案