лд:повторяющийся символ _dbg_char
Вопрос
Получение ошибки компоновщика в osx (нет ошибок в linux или fbsd для того же кода):
ld: duplicate symbol _dbg_char in .libs/liboekernel_la-OEK_get.o and .libs/liboekernel_la-OEK.o
2 библиотеки, перечисленные в ошибке, принадлежат мне, но символ — нет.c++flint подтверждает, что «_dbg_char» есть в обеих библиотеках, но я не уверен, как узнать, откуда он взялся.
трюки, стратегии и прямые ответы о том, как идентифицировать _dbg_char, будут очень признательны.
проект использует libtool/autotools и gcc 4.01
Решение
Найден макрос регистрации/отладки, который определял dbg_char с помощью 'dbg_ ## t
'.исправление заключалось в том, чтобы сделать его статическим.уроки выучены:
- osx добавляет начальный символ _ к именам символов.только когда я запустил nm в Linux и увидел тот же символ без начального _, я решил поискать в кодовой базе "
dbg_
" вместо "_dbg_
" - OSX был прав, жалуясь
- ирония в том, что вырезание и вставка макроса отладки, который я не до конца понял, доставило мне столько хлопот
Другие советы
Возможно, вы захотите проверить, обе ли библиотеки #include
файл заголовка, который объявляет _dbg_char
но пропустить extern
ключевое слово.Может быть, это #ifdef
разработан для других платформ, поэтому вы столкнетесь с этой проблемой только на OS X.