我正在 AIX 上编译一个程序。它已成功编译,但给出以下警告:
ld: 0711-224 WARNING: Duplicate symbol: .basename
ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information.
我试图在我的"common.o"文件中找到这个符号。
nm -X64 -f common.o | fgrep '.basename'
.basename T 3776 120
但是当在可执行文件上找到这个符号时,我发现以下内容:
nm -X64 CCF | fgrep '.basename'
.basename T 4295089984 120
.basename T 4295174672
.basename t 4295174672 40
是否可以显示包含此符号的库名称?
此符号是否存在于我的源文件中?(可能听起来很傻,但我真的不知道)
我找到了这个问题的答案,它可以在源头上追溯。
- 我应该采取哪些步骤来删除此警告?此外,此重复符号是否会导致应用程序崩溃?就我而言,它正在崩溃。
根据手册页,basename()
有两个版本,一个POSIX和一个GNU,看起来你正在链接这两个版本。您需要根据需要选择一个并抑制另一个。手册页介绍了如何操作。
由于它们的行为不同,因此当链接器/加载程序将其绑定到另一个代码时,为其中一个编译的代码可能会崩溃。如果你可以选择编译器,选择非gcc编译器可能会有所帮助。