Ошибка "неразрешенное включение" с 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 84

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 Project> > Hello world C++ Project"
  • в разделе" Toolchains "выберите" Linux GCC"

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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