重复的符号和应用程序崩溃

时间:2012-09-27 19:59:15

标签: c warnings aix nm duplicate-symbol

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

  • 我的源文件中是否存在此符号? (可能听起来很傻但我真的不知道)

  

我找到了这个问题的答案,可以在源头上找到答案。

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

1 个答案:

答案 0 :(得分:1)

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

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