Как обрабатывать ошибки компоновщика в C ++ / GNU toolchain? - PullRequest
2 голосов
/ 19 февраля 2010

Принимая во внимание цепочку инструментов C ++ / GNU, каков хороший метод, инструмент или стратегия для выявления ошибок компоновщика?

Ответы [ 4 ]

2 голосов
/ 19 февраля 2010

Не совсем точно, что вы имеете в виду, но если вы говорите о загадочных символах компоновщика, таких как:

mylib.so: неопределенный символ: _ZN5CandyD2Ev

Вы можете использовать C ++ Filta, чтобы сделать загадку для вас.

с ++ фильтр _ZN5CandyD2Ev

вернет Candy :: ~ Candy (), так что деструктор Кенди не был связан.

1 голос
/ 19 февраля 2010

С помощью gcc toolchain я использую:

  • nm: чтобы найти символы в объектных файлах
  • ld: чтобы найти как библиотека связывает
  • c ++ Filta: найти имя C ++ символа из его искаженного имени

Проверьте этот для деталей.

1 голос
/ 19 февраля 2010

Ну, во-первых, RTFM. Нет, серьезно, прочитайте документацию.

Если вы не хотите этого делать, попробуйте найти ошибку, которая появляется.

Вот еще несколько вещей, которые следует запомнить: «пропущенные» символы часто указывают на то, что вы не включили соответствующий источник или библиотеку; «пропущенные» символы иногда указывают на то, что вы пытаетесь связать библиотеку, созданную с другим соглашением искажения (или другим компилятором); убедитесь, что у вас есть extern "C", где это необходимо; декларация и определение не одно и то же; если ваш компилятор не поддерживает «экспорт», убедитесь, что код шаблона доступен для создания экземпляров объектов.

0 голосов
/ 19 февраля 2010

Посмотрите на имена символов, о которых сообщается, что они являются проблемными.

  • Если сообщается о пропущенных символах, выясните, в каких исходных файлах или библиотеках должна быть определена эта функция / ...в. Проверьте параметры компиляции / компоновщика, чтобы выяснить, почему эти файлы не компилируются и не связываются.
  • Если есть несколько определенных символов, компоновщик обычно упоминает, какие объектные файлы или библиотеки содержат их.Посмотрите на эти файлы / их источники, чтобы узнать, почему нарушающие функции / ... включены в оба из них.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...