Error "inclusión no resuelta" con Eclipse CDT para cabeceras de biblioteca estándar C
eclipse-cdt standard-library (12)
Como se señala en las respuestas principales (actuales), es necesario especificar dónde se encuentran las carpetas de compilación, que se pueden agregar a través de un diálogo al hacer clic derecho en el proyecto y seleccionar Propiedades-> C / C ++ General-> Rutas y símbolos.
La pregunta restante es qué caminos se deben agregar.
Si compila de forma cruzada o hace algo sofisticado, probablemente sepa qué rutas necesita y en qué orden (o debería consultar la documentación de su compilador y / u otras dependencias).
Para aquellos que buscan lo básico: si tiene gcc configurado correctamente para acceder a la línea de comandos, y necesita saber cuáles son las rutas de inclusión predeterminadas que utiliza, simplemente pregúntelo.
Según el idioma que le interese, use:
gcc -x c -v -E /dev/null
gcc -x c++ -v -E /dev/null
... esto mostrará la configuración predeterminada del compilador que se utiliza al invocar gcc (y este comando también funciona si "gcc" es realmente un alias para clang, como en OSX).
En Windows, tenga en cuenta que /dev/null
es solo una abreviatura fácil para un archivo de entrada vacío (sin tener que crear uno).
Hacia la parte inferior se encontrará 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 enumerados aquí, en el orden indicado, en el cuadro de diálogo de rutas y símbolos de Eclipse, Eclipse CDT debería poder encontrar los encabezados estándar, y quizás algunos encabezados adicionales específicos de su sistema operativo.
(Gracias a la respuesta de devnull a una pregunta relacionada).
Configuré CDT para eclipse y escribí un sencillo programa hello world C:
#include <stdio.h>
int main(void){
puts("Hello, world.");
return 0;
}
El programa crea y ejecuta correctamente, pero eclipse sigue mostrando este signo de interrogación amarillo junto a la declaración de inclusión que dice "Unresolved inclusion: <stdio.h>"
cuando pongo el mouse sobre ella.
No afecta la ejecución del programa, pero me parece bastante molesto.
¿Alguien tiene alguna idea de cómo eliminarlo?
El compilador que Eclipse está utilizando es capaz de resolver los símbolos muy bien, por lo que el código compilará bien.
Pero el Eclipse de finalización de código / preprocesador no sabe dónde está stdio.h.
Debe especificar la ruta del sistema de archivos donde se encuentra stdio.h.
Ver: http://help.eclipse.org/galileo/index.jsp?topic=/org.eclipse.cdt.doc.user/tasks/cdt_t_proj_paths.htm
En ADT, hice lo siguiente:
- haga clic derecho en el proyecto y seleccione Propiedades
- expanda C / C ++ General y seleccione Preprocesador Incluir rutas, macros, etc.
- seleccione entradas de configuración de usuario CDT
- seleccione Agregar ... desde el menú de la derecha
- En el Add Add Directory cambie la ruta del proyecto a la ruta del sistema de archivos
- Busque el directorio que contiene sus archivos de inclusión
- agitar y repetir según sea necesario
Encontré estas respuestas (incluida la aceptada) algo crípticas.
Para mí, tuve que agregar la ruta donde está ubicado 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 directorio de include
para cada idioma que esté utilizando. (En mi caso, necesitaba simplemente agregarlo a GNU C ++)
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 use la configuración activa.
Desafortunadamente debido a algún error en eclipse , la opción no se almacena localmente, por lo que debe usar la configuración del espacio de trabajo 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 se establece con la configuración Cross GCC activa del proyecto.
Estoy usando Eclipse con Cygwin y esto funcionó para mí:
Vaya a Proyecto> Propiedades> C / C ++ General> Preprocesador Incluye ...> Proveedores y seleccione "Configuración del compilador incorporado CDT GCC Cygwin [Compartido]".
Estoy usando ecualización basada en eclipse IDE para proyectos integrados y acabo de resolver este problema eliminando y volviendo a agregar las direcciones de origen a Properidades del proyecto-> C / C ++ General-> Ruta y Sybols-> Incluir directorios. Esto significa que hay muchas razones para llevar el mensaje "Inclusión no resuelta:" y también hay mucha solución.
Normalmente, Eclipse debería poder resolver automáticamente los archivos de inclusión estándar. Lo hace llamando a gcc y preguntando 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 desea que diferentes proyectos utilicen compiladores diferentes, entonces quizás desee modificar las opciones de descubrimiento. Estos están ocultos por defecto, así que primero habilítalos desde Ventana> Preferencias> C / C ++> Configuración de las páginas de propiedades> Mostrar la página "Opciones de descubrimiento". Luego puede encontrarlos en C / C ++ Build> Discovery Options en las propiedades del proyecto.
Vaya a Proyecto> Propiedades> C / C ++ General> Preprocesador Incluye> Proveedores y seleccione "Configuración del compilador incorporado CDT GCC" y "Configuración del compilador incorporado CDT CROSS GCC".
simplemente agregando a la base de conocimiento, 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.
- Seleccione Archivo >> Nuevo proyecto
- En el Asistente de proyectos, seleccione C / C ++ >> Proyecto C ++
- En la sección "Tipo de proyecto", selecciona " Proyecto Makefile >> Hello world C ++ Project "
- En la sección "Toolchains", selecciona " Linux GCC "
Puede resolver el problema. (Discúlpeme por mal inglés)