Вопрос

Получение ошибки компоновщика в 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'.исправление заключалось в том, чтобы сделать его статическим.уроки выучены:

  1. osx добавляет начальный символ _ к именам символов.только когда я запустил nm в Linux и увидел тот же символ без начального _, я решил поискать в кодовой базе "dbg_" вместо "_dbg_"
  2. OSX был прав, жалуясь
  3. ирония в том, что вырезание и вставка макроса отладки, который я не до конца понял, доставило мне столько хлопот

Другие советы

Возможно, вы захотите проверить, обе ли библиотеки #include файл заголовка, который объявляет _dbg_char но пропустить extern ключевое слово.Может быть, это #ifdef разработан для других платформ, поэтому вы столкнетесь с этой проблемой только на OS X.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top