3

我正在 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
  • 我可以显示包含此符号的库名称吗?

  • 这个符号是否出现在我的源文件中?(可能听起来很傻,但我真的不知道)

我找到了这个问题的答案,它可以在源头中追踪。

  • 我应该采取哪些步骤来删除此警告?这个重复的符号也会导致应用程序崩溃吗?就我而言,它正在崩溃。
4

1 回答 1

1

根据手册页,有两个版本basename(),一个 POSIX 和一个 GNU,看起来你正在链接它们。根据您的需要,您将需要选择一个并抑制另一个。手册页解释了如何。

因为它们的行为不同,为其中一个编译的代码可能会在链接器/加载器将其绑定到另一个时崩溃。如果您可以选择编译器,选择非 gcc 可能会有所帮助。

于 2012-09-27T20:35:40.057 回答