2012-09-27 8 views
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 
  • Могу ли я отображать имя библиотеки, которая содержит этот символ?

  • Этот символ присутствует в моем исходном файле? (Может быть это звучит глупо, но я не знаю)

меня найти ответ на этот вопрос, что это может быть прослежено в источнике.

  • Какие шаги следует предпринять, чтобы удалить это предупреждение? Также этот дублирующий символ может вызвать сбой приложения? В моем случае это сбой.
+0

Вы взяли предложение линкера? 'Используйте параметр -bloadmap или -bnoquiet, чтобы получить дополнительную информацию.' –

+0

Я не пытался, но я меняю имя функции в моих источниках. Теперь дублированного предупреждения о символах больше нет. – QMG

ответ

1

Согласно man page, есть две версии basename(), один POSIX и один GNU, и это выглядит, как вы ссылаетесь в обоих из них. Вам нужно будет выбрать один и подавить другого, в зависимости от ваших потребностей. Как показано на странице руководства.

Поскольку они ведут себя по-разному, код, скомпилированный для одного, скорее всего, сбой, когда компоновщик/загрузчик свяжет его с другим. Если у вас есть выбор компиляторов, выбор не-gcc может помочь.

+0

Спасибо за ваш ответ. Предупреждает ли это предупреждение о сбое программы? – QMG

+1

Возможно. Код, скомпилированный для одной версии библиотеки, может произойти сбой, когда он связан во время выполнения с другой версией. Это происходит на C++ все время, когда вы смешиваете код и библиотеки из разных версий gcc/g ++. –

+0

Спасибо Рэндалл за ответ. удалило это предупреждение, но похоже, что какая-то другая область также вызывает утечку памяти :(на AIX – QMG

 Смежные вопросы

  • Нет связанных вопросов^_^