Ошибка "Неразрешенное включение" с Eclipse CDT для стандартных заголовков библиотеки C

Я установил CDT для eclipse и написал простую программу Hello World:

#include <stdio.h>

int main(void){
    puts("Hello, world.");
    return 0;
}

Программа строит и работает правильно, но eclipse продолжает показывать этот желтый вопросительный знак со стороны инструкции включения, которая говорит "Unresolved inclusion: <stdio.h>", когда я наводил на нее курсор.

Это не влияет на работу программы, но я нахожу ее довольно раздражающей.

Кто-нибудь знает, как его удалить?

Ответ 1

Компилятор, который использует Eclipse, способен правильно разрешать символы, поэтому код будет компилироваться отлично.

Но использование кода/препроцессора, используемого Eclipse, не знает, где существует stdio.h.

Вам нужно указать путь к файловой системе, где расположен stdio.h.

Смотрите: http://help.eclipse.org/galileo/index.jsp?topic=/org.eclipse.cdt.doc.user/tasks/cdt_t_proj_paths.htm

Ответ 2

Я нашел эти ответы (включая принятые) несколько загадочными.

Для меня мне пришлось добавить путь, где находится stdio.h(как указано в @ardnew). В Eclipse вы откроете Свойства своего проекта, разверните "C/С++ General" и выберите "Пути и символы".

Убедитесь, что вы добавили директорию include для каждого используемого вами языка. (В моем случае мне нужно было просто добавить его в GNU С++.)

enter image description here

Ответ 3

просто добавляя к базе знаний, я просто сделал это на win7 с cygwin.

это то, что, кажется, работает для меня.

включить пути для c:

D:\dev\cygwin\lib\gcc\i686-pc-cygwin\3.4.4\include
D:\dev\cygwin\usr\include

включить пути для С++:

D:\dev\cygwin\lib\gcc\i686-pc-cygwin\3.4.4\include
D:\dev\cygwin\lib\gcc\i686-pc-cygwin\3.4.4\include\c++
D:\dev\cygwin\usr\include

это дает мне чистую компиляцию мира привет.

Ответ 4

Перейдите в Проект> Свойства> C/C++ General> Препроцессор включает в себя> Провайдеры и выберите оба:

  • "Настройки встроенного компилятора CDT GCC"
  • "Настройки встроенного компилятора CDT CROSS GCC"

Для каждого из них также выберите подпункт: "Использовать глобального поставщика, совместно используемого проектами".

Протестировано на Eclipse 4.8.0 в Ubuntu 16.04 с миром C и C++ hello.

Ответ 5

  • Выберите Файл → Новый проект
  • В Мастере проектов выберите C/С++ → Проект С++
  • В разделе "Тип проекта" выберите " Makefile Project → Hello world С++ Project"
  • В разделе "Toolchains" выберите " Linux GCC"

Он может решить проблему. (Извините меня за плохой английский)

Ответ 6

Я использую Eclipse с Cygwin, и это сработало для меня:

Перейдите в Project > Properties > C/С++ General > Препроцессор включает... > Провайдеры и выберите "Встроенные настройки компилятора CDT GCC Cygwin [Shared]".

Ответ 7

Я работаю с конфигурациями нескольких кросс-компиляторов, где мне нужно использовать разные местоположения для файлов заголовков STD (и других переменных среды).

Решение заключалось в настройке индексатора, чтобы он использовал активную конфигурацию.
К сожалению, из-за ошибки в eclipse, этот параметр не сохраняется локально, поэтому вам нужно использовать рабочая область, если вы хотите сохранить конфигурацию при повторном открытии eclipse.

Окно → Настройки → C/С++ → Indexer → Использовать конфигурацию активной сборки

Это заставит eclipse использовать правильный компилятор, который устанавливается с активной конфигурацией Cross GCC проекта.

Ответ 8

В ADT я сделал следующее:

  • щелкните правой кнопкой мыши по проекту и выберите "Свойства"
  • разверните C/С++ Общие и выберите Preprocessor Include Paths, Макросы и т.д.
  • выберите записи пользовательской настройки CDT
  • выберите Добавить... из меню справа.
  • В каталоге Add Include Directory изменить путь к пути к файловой системе
  • Перейдите в каталог, содержащий ваши включенные файлы.
  • перемешать и повторить по мере необходимости

Ответ 9

Обычно Eclipse должен иметь возможность автоматически разрешать стандартные файлы include. Он делает это, вызывая gcc и запрашивая его конфигурацию. Скорее всего, Eclipse не находит ваш gcc (или, по крайней мере, не версию, которую вы используете для компиляции).

Вместо указания всех стандартных включений в настройках проекта вы, вероятно, захотите убедиться, что Eclipse находит gcc. Добавьте каталог, в котором gcc находится в переменной среды PATH перед запуском Eclipse.

Если вы хотите, чтобы разные проекты использовали разные компиляторы, вы можете настроить параметры обнаружения. Они скрыты по умолчанию, поэтому сначала включите их из окнa > Настройки > C/С++ > Параметры страницы свойств > Отобразите страницу "Параметры поиска". Затем вы можете найти их в разделе C/С++ Build > Discovery Options в свойствах проекта.

Ответ 10

Как отмечается в верхних ответах, необходимо указать, где расположены папки сборки, которые можно добавить с помощью диалогового окна, щелкнув правой кнопкой мыши по проекту и выбрав Properties-> C/C++ General-> Paths and Symbols.

Остается вопрос, какие пути нужно добавить.

Если у вас правильно настроен gcc для доступа из командной строки, и вам нужно знать, какие пути по умолчанию включают в себя используемые пути, просто спросите его; в зависимости от того, какой язык вас интересует, используйте:

gcc -x c -v -E /dev/null
gcc -x c++ -v -E /dev/null

... здесь будут перечислены параметры компилятора по умолчанию, которые используются при вызове gcc (и эта команда также работает, если "gcc" действительно является псевдонимом для clang, как в OSX).

/dev/null используется пустой файл - мы говорим gcc разобрать пустой файл

-x <language> определяет язык для компиляции как необходимый, потому что мы не используем файл с расширением, которое определяет язык

-v подробный вывод, который включает в себя вывод путей включения

-E выполняет только предварительную обработку, выводит предварительно обработанный файл (это не позволяет gcc жаловаться, что пустой файл не компилируется правильно)

Внизу будет список включаемых каталогов:

#include "..." search starts here:
#include <...> search starts here:
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/7.0.2/include
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include
 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include
 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/System/Library/Frameworks (framework directory)
End of search list.

Если вы введете перечисленные здесь каталоги в указанном порядке в диалоговое окно путей и символов Eclipse, Eclipse CDT сможет найти стандартные заголовки и, возможно, некоторые дополнительные заголовки, специфичные для вашей ОС.

(Благодаря Devnull ответ на связанный вопрос.)

Ответ 11

Я использую Eclipse на основе CodeWarrior IDE для встроенных проектов, и я только что решил эту проблему, удалив и добавив снова исходные адреса в Project Properities- > C/С++ General- > Path and Sybols- > Include Directories. Это означает, что есть масса причин принимать сообщение "Неразрешенное включение:", а также множество решений.

Ответ 12

Ошибка, с которой я настраивал Paths and Symbols, заключается в том, что изначально я сконфигурировал пути include для другого языка. Я работаю с CDT и Cygwin gnu С++. Поэтому вы должны настраивать символы и пути под языком GNU С++. введите описание изображения здесь