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

Я настроил CDT для eclipse и написал простую программу hello world C:

#include <stdio.h>

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

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

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

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

12 ответов


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

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

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

см.: http://help.eclipse.org/galileo/index.jsp?topic=/org.eclipse.cdt.doc.user/tasks/cdt_t_proj_paths.htm


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

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

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

enter image description here


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

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

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

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

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

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

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


перейти к проекту > свойства > C / C++ общие > препроцессор включает > поставщики и выберите "настройки встроенного компилятора CDT GCC "и"настройки встроенного компилятора CDT CROSS GCC".


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

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


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

перейти к проекту > свойства > C / C++ общие > препроцессор включает... > Услуги поставщиков и выберите " CDT GCC встроенные настройки компилятора Cygwin [Shared]".


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

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

Окно - > настройки - > C / C++ - > индексатор - > использовать конфигурацию активной сборки

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


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

  1. правой кнопкой мыши на проекте и выберите Свойства
  2. расширить с/C++ общие и выберите препроцессора Include пути, макросы и т. д.
  3. выберите записи настроек пользователя CDT
  4. выберите Добавить... из меню правой руки
  5. В Add Include Directory изменить путь проекта к пути файловой системы
  6. перейдите в каталог, содержащий ваши файлы Include
  7. перемешать и повторить как нужно

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

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

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


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


ошибка настройки путей и символов заключается в том, что изначально я настроил пути включения для другого языка. Я работаю с CDT и Cygwin gnu C++. Поэтому вы должны настроить символы и пути на языке GNU C++.enter image description here


В качестве (текущего) примечания к верхним ответам необходимо указать, где расположены папки сборки, которые могут быть добавлены в диалоговом окне, щелкнув правой кнопкой мыши проект и выбрав Свойства->C/C++ General->пути и символы.

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

Если вы перекрестно компилируете или делаете что-то необычное, вы, вероятно, знаете, какие пути вам нужны и в каком порядке (или должны посмотреть документацию для вашего компилятора и / или другая зависимость.)

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

в зависимости от того, какой язык вас интересует, использовать:

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

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

В Windows, Примечание что /dev/null это просто стенография для пустого входного файла (без того, чтобы его создать).

В нижней части будет список каталогов include:

#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 это в смежный вопрос.)