Error de “inclusión no resuelta” con Eclipse CDT para encabezados de biblioteca estándar C

7 minutos de lectura

avatar de usuario
Derrick Zhang

Configuré CDT para eclipse y escribí un programa simple en C de hola mundo:

#include <stdio.h>

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

El programa se compila 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 el funcionamiento del programa, pero lo encuentro bastante molesto.

¿Alguien tiene alguna idea de cómo quitarlo?

  • Pensarías que el ejemplo de Hello World haría esto por ti, o al menos te proporcionaría alguna ayuda. Si eclipse no incluye un compilador, ¿por qué no lo incluye?

    –Doug Molineux

    3 de agosto de 2012 a las 21:07

  • stackoverflow.com/questions/7905025/…

    – vanuano

    22 de octubre de 2012 a las 10:07

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

Para mí, tuve que agregar la ruta donde se encuentra stdio.h (como dijo @ardnew). En Eclipse, abre las Propiedades de su proyecto, expande “C/C++ General” y selecciona “Rutas y Símbolos”.

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

Captura de pantalla del cuadro de diálogo "Propiedades del proyecto" de Eclipse con "Rutas y símbolos" seleccionado.  Se superpone un cuadro de diálogo "añadir ruta de directorio".

  • ¡Esto es inquietantemente cerca de lo que necesitaba! Solo tuve que cambiar el nombre de usuario en la ruta.

    – Lucas

    8 de octubre de 2013 a las 8:26

  • En OS X, es posible que deba instalar manualmente las herramientas de desarrollo de la línea de comandos (que primero requiere instalar Xcode) usando el comando /usr/bin/xcode-select --install y luego podrá apuntar Eclipse a /usr/include/

    – RobV

    15/04/2014 a las 22:24

  • En Yosemite. Usando Eclipse Juno. Esto funcionó para mí, excepto que la ruta que había dado era un poco diferente (/Users/SrinivasanNatarajan/android-ndk/platforms/android-19/arch-arm/usr/include). A pesar de que todos los errores sin resolver desaparecieron, todavía tengo la duda de si ‘establecí la ruta correcta’. “Eclipse realmente apesta”. Tuve que pasar horas para configurar el IDE para el desarrollo.

    – Srinivasan norte

    01/04/2015 a las 10:22


  • Gracias. Solo tu variante me ayudó.

    – Nikmoon

    20 de diciembre de 2016 a las 9:18

  • En mi caso (con MinGW), usé “Sistema de archivos…” para agregar el directorio “C:\MinGW\include”

    – Gary99

    4 de enero de 2018 a las 15:54

avatar de usuario
nuevo

El compilador que utiliza Eclipse es capaz de resolver los símbolos correctamente, por lo que el código se compilará correctamente.

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

Debe especificar la ruta del sistema de archivos donde stdio.h se encuentra.

La documentación de Eclipse describe esto en varias secciones para el compilador:

Y si el indizador/completador de código o el preprocesador específicamente tampoco pueden ubicar stdio.h:

La ubicación exacta de stdio.h dependerá del sistema para el que tenga la intención de escribir el código. Si está escribiendo código para el mismo sistema en el que está ejecutando Eclipse, entonces la ubicación estándar es /usr/include/stdio.h para Linux, macOS, Cygwin, etc.

Si está realizando una compilación cruzada para un sistema de destino separado/remoto (p. ej., Android, Raspberry Pi, STM32), estará ubicado en algún lugar del SDK que instaló para ese sistema. Deberá consultar la documentación de ese SDK en particular.

  • Gracias por la respuesta. Pero, ¿dónde está el camino para Ubuntu 11.10?

    – Derrick Zhang

    18 de febrero de 2012 a las 2:23

  • Una cosa que me confundió fue que tuve que agregar la ruta a la pestaña “incluye”, en lugar de la pestaña “rutas de la biblioteca”. Siempre pensé que las inclusiones de “soporte angular” eran inclusiones de “biblioteca”.

    – aaidan

    7 de julio de 2012 a las 5:24

  • Usted especifica dónde encontrar los archivos de encabezado (es decir, archivos .h) en la pestaña de inclusión. Le dice al enlazador dónde puede encontrar archivos de biblioteca compilados en la pestaña de ruta de la biblioteca. La convención de comillas frente a corchetes angulares probablemente dependa del compilador, pero siempre pienso en <> en el sentido de buscar primero en el lugar de la biblioteca del sistema estándar y “” en el sentido de buscar primero en mi proyecto.

    – Tod

    26 de julio de 2012 a las 5:17


  • Los compiladores modernos no distinguen entre comillas y paréntesis angulares. Los encabezados del sistema estándar convencional todavía se colocan entre paréntesis angulares.

    – Seppo Enarvi

    13 de agosto de 2012 a las 8:54

simplemente agregando a la base de conocimientos, acabo de hacer esto en win7 con cygwin.

esto es lo que parece funcionar para mí.

incluir rutas para c:

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

incluir 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 hola mundo.

  • Soy del futuro. He venido a decir gracias. Esto es en realidad lo primero que funcionó para mí. Nunca he tenido un hola mundo tan difícil. Gracias Señor.

    – nVentimiglia

    13 de julio de 2014 a las 15:57


avatar de usuario
mike b

Vaya a Proyecto > Propiedades > C/C++ General > Preprocesador incluido > Proveedores y seleccione ambos:

  • “Configuración del compilador integrado CDT GCC”
  • “Configuración del compilador incorporado CDT CROSS GCC”

Para cada uno de ellos, seleccione también la subentrada: “Usar proveedor global compartido entre proyectos”.

Probado en Eclipse 4.8.0 en Ubuntu 16.04 con C y C++ hello world.

  • Seleccione Archivo>>Nuevo Proyecto
  • En el Asistente para proyectos, seleccione Proyecto C/C++>> C++
  • En la sección “Tipo de proyecto”, seleccione “Proyecto Makefile>> Hola mundo Proyecto C++
  • En la sección “Cadenas de herramientas”, seleccione “GCC de Linux

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

  • Hice esas cosas, pero aún no reconoció que los encabezados están en /usr/include.

    – hombre del espacio de cardiff

    27 de enero de 2013 a las 21:37

  • Mucho más fácil que agregar cada uno de ellos. Usé la opción multiplataforma, que también funcionó bien (en Ubuntu)

    – panmari

    3 mayo 2013 a las 12:56

  • ¡Muy útil! Gran inglés.

    – AturSams

    10 de marzo de 2016 a las 15:42

  • ¿Cómo se hace esto en un proyecto existente?

    – Jay Elston

    24 de septiembre de 2018 a las 16:58

avatar de usuario
superm0

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

Vaya a Proyecto > Propiedades > C/C++ General > El preprocesador incluye… > Proveedores y seleccione “Configuración del compilador integrado CDT GCC Cygwin [Shared]”.

  • Hice esas cosas, pero aún no reconoció que los encabezados están en /usr/include.

    – hombre del espacio de cardiff

    27 de enero de 2013 a las 21:37

  • Mucho más fácil que agregar cada uno de ellos. Usé la opción multiplataforma, que también funcionó bien (en Ubuntu)

    – panmari

    3 mayo 2013 a las 12:56

  • ¡Muy útil! Gran inglés.

    – AturSams

    10 de marzo de 2016 a las 15:42

  • ¿Cómo se hace esto en un proyecto existente?

    – Jay Elston

    24 de septiembre de 2018 a las 16:58

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

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

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

Esto hará que Eclipse use el compilador correcto que está configurado con la configuración Cross GCC activa del proyecto.

  • Tuve el mismo problema, compilando de forma cruzada a ESP8266. Lástima que esta página está tan llena, tuve que resolverlo yo mismo.

    – Michael Böckling

    7 mayo 2016 a las 12:35

  • Gracias por esto. También tuve este problema después de crear múltiples configuraciones de compilador cruzado (para diferentes versiones del SDK integrado ESP32 “ESP-IDF”). El indexador no recogía los encabezados correctos. Esta configuración parece permitir que Indexer use el mismo entorno que la configuración activa, lo que en mi caso le permitió seleccionar los encabezados correctos.

    – davidA

    17 de enero de 2018 a las 2:32


  • Tengo marcada esta opción pero no soluciona el problema. Eclipse es totalmente esquizofrénico. A veces no obtengo estos errores, pero a veces decide que tengo encabezados y símbolos no reconocidos por todas partes. Todavía no he podido correlacionar cuándo ocurre y se resuelve en función de las acciones que realizo, aparte de cambiar el código, guardarlo y reconstruirlo.

    – acechador

    25 de marzo a las 17:08

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad