Как решить "Неопределенная ссылка на функцию" в Eclipse CDT? - PullRequest
0 голосов
/ 10 ноября 2018

Я разработал проект C с Eclipse Photon (4.8.0) для разработки программы для ESP-32. Я настроил IDE в соответствии с этой официальной инструкцией по установке .

Мигает ESP-32 работает нормально. Но как только я пытаюсь включить заголовочные файлы из подпапки, у меня возникают проблемы. Я создал очень простой проект, чтобы проиллюстрировать проблему. Проект состоит из main.c, base/test.h и base/test.c, тогда как файлы test.h и test.c содержат только одну функцию с подписью void function1(void);.

Когда я пытаюсь вызвать function1() в main.c, я получаю эту ошибку в main.c:

Неопределенная ссылка на function1 ()

Пожалуйста, сравните с приложенным скриншотом, где все изображено.

Как решить эту проблему?

enter image description here

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Похоже, вам нужно правильно связать .

  1. Если вы связываетесь с библиотекой, вам необходимо указать:

    • название библиотеки: Project\Settings\C C++ General\Paths and Symbols\Libraries
    • где компоновщик должен искать эту библиотеку: Project\Settings\C C++ General\Paths and Symbols\Library Paths
      См. Примечание 1.
  2. Если вы связываетесь с объектными файлами, добавьте их в:

    • Project\Settings\C C++ Build\Settings\Linker\Miscellaneous\Other objects

Примечание 1 :
Если имя вашей библиотеки, например, libsomething.a, вам нужно указать только something в качестве имени; поэтому пропустите префикс lib и суффикс .a. Если ваша библиотека не имеет префикса lib, вам необходимо добавить ее имя с префиксом :, например: something.a следует добавить как :something.a.

0 голосов
/ 10 ноября 2018

Это не компилятор, а ошибка компоновщика.

Обратите внимание, что при #include в заголовочном файле вы только делаете внешнюю функцию известной компилятору. Вам также необходимо связать с внешней функцией во время стадии связывания. Убедитесь, что вы включили в ссылку скомпилированный объектный файл, содержащий function1.

...