Eclipse-CDT / C ++: неопределенные ошибки ссылок, хотя правильные .o-файлы создаются и передаются компоновщику - PullRequest
1 голос
/ 24 ноября 2011

Сначала: я не использую уже скомпилированную библиотеку.

Вот ситуация: у меня есть проект C ++ в eclipse CDT, который имеет структуру папок, подобную этой:

project
  somefoldername
    src
    include
  library
    src
    include

somefoldername / src и library / src определены как исходные папки, а somefoldername / include, а также library / include определены как включаемые папки (в C / C ++ General-> Paths and Symbols, что также влияет на опцию компиляторов -I ).

Папка «library» содержит исходный код библиотеки, используемой моим собственным кодом (который можно найти в «somefolder»). Что ж, компиляция всего проекта работает нормально, но связывание завершается с целой кучей ошибок «неопределенной ссылки» в источнике библиотеки.

Появляются неопределенные ссылочные ошибки, хотя создаются * .o-файлы, в которых должны быть найдены отсутствующие функции, а также передаются компоновщику позже.

Что я делаю не так?

Редактировать: Обновлено до текущей конфигурации и попытки решить проблему.

Edit2: Принятый ответ немного помог мне, но самой большой проблемой, казалось, была политика «связать все сразу», за которой последовало затмение. Я перешел к autoconf и сначала собрал библиотеку, а затем связал ее с основным приложением. Хотя это больше работы, это более чистый подход.

1 Ответ

2 голосов
/ 25 ноября 2011

Три возможности:

1) "неопределенные" символы на самом деле не находятся в вашей библиотеке

 This is unlikely, but you can verify using the "nm" Linux command

2) Вы не задаете путь поиска в библиотеке ("dash-big-L ") правильно в Eclipse

  • ссылка статическая библиотека в eclipse cdt

    ... или ...

    3) Возможно, вы создали библиотеку со связью «C», но ваша программа использует связь C ++ (или наоборот).Если вы используете компилятор "C" (gcc ") или имеете какие-либо исходные файлы" * .c ", то убедитесь, что у всех функций есть прототипы в заголовке .h, и что все прототипы используют"внешний "C" "в зависимости от ситуации:

    & http://msdn.microsoft.com/en-us/library/0603949d%28v=vs.80%29.aspx

...