Error "Inclusión no resuelta" con Eclipse CDT para encabezados de biblioteca estándar de C


Configuré CDT para eclipse y escribí un simple programa hello world C:

#include <stdio.h>

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

El programa se construye y se ejecuta correctamente, pero eclipse sigue mostrando este signo de interrogación amarillo al lado de la declaración de inclusión que dice "Unresolved inclusion: <stdio.h>" cuando pongo el ratón sobre él.

No afecta la ejecución del programa, pero me parece bastante molesto.

¿alguien tiene alguna idea de cómo eliminarlo ?

Author: einpoklum, 2012-02-18

12 answers

El compilador que Eclipse está utilizando es capaz de resolver los símbolos muy bien, por lo que el código se compilará bien.

Pero el código de finalización/preprocesador Eclipse está utilizando no sabe dónde stdio.h existe.

Necesita especificar la ruta del sistema de archivos donde stdio.h está localizado.

Véase: http://help.eclipse.org/galileo/index.jsp?topic=/org.eclipse.cdt.doc.user/tasks/cdt_t_proj_paths.htm

 46
Author: ardnew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-02-18 02:19:09

Encontré estas respuestas (incluyendo la aceptada) algo crípticas.

Para mí, tuve que añadir el camino donde stdio.h se encuentra (como @ardnew dijo). En Eclipse, abra las propiedades de su proyecto, expanda "C/C++ General" y seleccione "Rutas y símbolos".

Asegúrese de haber agregado el directorio include para cada idioma que esté utilizando. (En mi caso, solo necesitaba agregarlo a GNU C++.)

introduzca la descripción de la imagen aquí

 45
Author: aaaidan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-08-13 09:13:03

Simplemente añadiendo a la base de conocimientos, acabo de hacer esto en win7 con cygwin.

Esto es lo que parece funcionar para mí.

Incluye rutas para c:

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

Incluye rutas para c++:

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

Esto me da una compilación limpia de hello world.

 16
Author: Ray Tayek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-13 04:09:20

Vaya a Proyecto > Propiedades > C / C++ General > Preprocesador Incluye > Proveedores y seleccione" CDT GCC Built-in Compiler Settings "y"CDT CROSS GCC Built-in Compiler Settings".

 14
Author: Mike B,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-11 11:30:04
  • Seleccione >Archivo>Nuevo Proyecto
  • En el Asistente para Proyectos, seleccione C / C++>> C++ Project
  • En la sección" Tipo de proyecto", seleccione " Makefile Project > > Hello world C++ Project "
  • En la sección" Cadenas de herramientas", seleccione " Linux GCC "

Puede resolver el problema. (Perdón por el mal inglés)

 9
Author: Nader Aryabarzan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-03 16:47:54

Estoy usando Eclipse con Cygwin y esto funcionó para mí:

Vaya a Proyecto > Propiedades > C/C++ General > Incluye Preprocesador... > Proveedor y seleccione " CDT GCC Built-in Compiler Settings Cygwin [Shared]".

 4
Author: superm0,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-02 06:42:10

Estoy trabajando con múltiples configuraciones de compilador cruzado, donde necesito usar diferentes ubicaciones para los archivos de encabezado STD (y otras variables de entorno).

La solución fue configurar el indexador para que utilice la configuración activa.
Desafortunadamente debido a algunos error en eclipse, la opción no se almacena localmente, por lo que debe usar la configuración workspace si desea guardar la configuración cuando abra eclipse nuevo.

Ventana - > Preferencias -> C/C++ - > Indexador - > Usar configuración de compilación activa

Esto hará que eclipse use el compilador correcto que se establece con la configuración de Cross GCC activa del proyecto.

 4
Author: Yochai Timmer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-02 12:02:15

En ADT hice lo siguiente:

  1. haga clic derecho en el proyecto y seleccione Propiedades
  2. expanda C / C++ General y seleccione Preprocesador Incluir rutas, Macros, etc.
  3. seleccione Entradas de Configuración de Usuario CDT
  4. seleccione Agregar... desde el menú de la derecha
  5. En el Directorio Add Include cambie la ruta del Proyecto a la Ruta del Sistema de Archivos
  6. Busque el directorio que contiene sus archivos de inclusión
  7. revuelva y repita según sea necesario
 1
Author: user330844,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-18 18:20:31

Normalmente, Eclipse debería ser capaz de resolver automáticamente los archivos include estándar. Lo hace llamando a gcc y preguntando a su configuración. Lo más probable es que Eclipse no encuentre su gcc (o al menos no la versión que usa para compilar).

En lugar de especificar todas las rutas de inclusión estándar en la configuración del proyecto, es probable que desee asegurarse de que Eclipse encuentre gcc. Agregue el directorio donde se encuentra gcc a la variable de entorno PATH antes de iniciar Eclipse.

Si quieres diferentes proyectos para usar diferentes compiladores, entonces es posible que desee ajustar las opciones de descubrimiento. Estos están ocultos de forma predeterminada, por lo que primero habilítelos desde Ventana > Preferencias > C/C++ > Configuración de páginas de propiedades > Mostrar la página "Opciones de descubrimiento". Luego puede encontrarlos en C / C++ Build > Discovery Options en propiedades del proyecto.

 1
Author: Seppo Enarvi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-07 07:15:35

Estoy usando el IDE CodeWarrior basado en eclipse para proyectos embebidos y acabo de resolver este problema eliminando y agregando nuevamente las direcciones de origen a los directorios Project Properities->C/C++ General->Path y Sybols-> Include. Esto significa que hay un montón de razones para tomar "Inclusión no resuelta:" mensaje y hay un montón de solución también.

 1
Author: Enes Akyay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-29 15:29:18

Un error que tuve al configurar Rutas y Símbolos es que inicialmente configuré las rutas de inclusión para un idioma diferente. Estoy trabajando con CDT y Cygwin gnu C++. Por lo tanto, debe configurar símbolos y rutas bajo el lenguaje GNU C++.introduzca la descripción de la imagen aquí

 0
Author: rodolk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-16 14:56:46

Como la nota (actual) top answers, es necesario especificar dónde se encuentran las carpetas de compilación, que se pueden agregar a través de un diálogo al que se accede haciendo clic con el botón derecho del ratón en el proyecto y seleccionando Propiedades->C/C++ General->Rutas y símbolos.

La pregunta restante es qué caminos deben agregarse.

Si está compilando o haciendo algo sofisticado, probablemente sepa qué rutas necesita y en qué orden (o debería mirar la documentación de su compilador y / u otros dependencia).

Para aquellos que buscan lo básico: si tiene gcc configurado correctamente para el acceso de línea de comandos, y necesita saber cuáles son las rutas de inclusión predeterminadas que utiliza, solo pregúntele.

Dependiendo del idioma que le interese, use:

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

...esto listará la configuración predeterminada del compilador que se usa cuando se invoca gcc (y este comando también funciona si "gcc" es realmente un alias para clang, como en OSX).

En Windows, tenga en cuenta que el /dev/null es solo un fácil taquigrafía para un archivo de entrada vacío (sin tener que crear uno).

Hacia la parte inferior estará la lista de directorios de inclusión:

#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.

Si ingresa los directorios listados aquí, en el orden listado, en el diálogo rutas y símbolos de Eclipse, Eclipse CDT debería ser capaz de encontrar las cabeceras estándar, y quizás algunas cabeceras adicionales específicas de su sistema operativo.

(Con agradecimiento a la respuesta de devnull a una pregunta relacionada.)

 0
Author: Theodore Murdock,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:02:20