run - how to setup eclipse for c++
El código c++ 11 genera errores semánticos en Eclipse, no puede cambiar la configuración de compilación (2)
Tengo problemas con el código c ++ 11 en Eclipse CDT. El código compila bien, pero en el editor veo que el servicio / indexador de descubrimiento marca todas las referencias a la biblioteca estándar de c ++ 11 (como std :: shared_ptr y std :: chrono :: milisegundos), lo que impide el programa se ejecuta. Se encuentran los archivos de inclusión, pero creo que los indicadores y macros adecuados no se propagan a las comprobaciones internas de CDT, por lo que no se define ninguno de los tipos o contenido principal de los encabezados. Tampoco puedo cambiar las configuraciones apropiadas en las propiedades del proyecto.
He navegado por otras publicaciones que describen problemas similares y posibles soluciones, como:
- Deshabilitar el descubrimiento de errores de Eclipse. (Codan falsos positivos)
- Eclipse compila con éxito pero aún da errores semánticos
- c ++ 0x compila pero eclipse los errores del editor incluso con el descubrimiento -gnu ++ 0x
- Compatibilidad con Eclipse CDT C ++ 11 / C ++ 0x
Algunas soluciones enmascaran el problema al deshabilitar el indexador o al deshabilitar errores / advertencias específicos, pero esto no es deseable ya que quiero ver los errores verdaderos cuando ocurren.
Otras (y probablemente más correctas) soluciones describen cómo pasar a través de las macros apropiadas (por ejemplo, __GXX_EXPERIMENTAL_CXX0X__) y las marcas de construcción (por ejemplo, -std = c ++ 11), pero esto es lo que creo que es el problema principal: no puedo cambiar estas configuraciones en el IDE. En "Proyecto -> Propiedades -> C / C ++ General -> Preprocesador Incluir rutas, macros, etc.", las pestañas Entradas y Proveedores aparecen en gris / deshabilitadas. Del mismo modo, en "Proyecto -> Propiedades -> C / C ++ Build -> Configuración", no hay pestañas para Configuración de herramienta o Descubrimiento como se menciona en algunas de las otras publicaciones.
Algunos detalles: Estoy usando Kepler compilación 20140224-0627 en Ubuntu 13.10 x64. El código con el que trato de trabajar es para Android NDK (última versión, r9d) y tengo instalado el complemento NDK de Google. El compilador es gcc 4.8 y usa la biblioteca de tiempo de ejecución gnustl_static. ¿Tal vez usar el toolchain / plugin NDK deshabilita las configuraciones que necesito modificar?
Cualquier ayuda es muy apreciada.
Primero, asegúrese de que su proyecto compila correctamente.
Después de eso, vaya a C / C ++ Build -> Tool Chain Editor y elija Current toolchain: Linux GCC (puede que necesite desactivar Mostrar cadenas de herramientas compatibles solamente ). Asegúrate de que el generador actual todavía sea el Creador de Android .
Ahora tiene acceso completo a C / C ++ General -> Página de Rutas y símbolos , con h Incluye y pestañas # Símbolos .
En estas dos pestañas, agrego manualmente
C:/Android/android-ndk-r9d/sources/cxx-stl/gnu-libstdc++/4.6/include
C:/Android/android-ndk-r9d/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi/include
C:/Android/android-ndk-r9d/sources/cxx-stl/gnu-libstdc++/4.6/include/backward
y
__GXX_EXPERIMENTAL_CXX0X__ = 1
Quizás necesite cambiar a C / C ++ Perspective , haga clic derecho en el proyecto e inicie Index -> Rebuild .
Tengo dos contribuciones aquí:
- Actualiza Eclipse si puedes. Arreglan las cosas de vez en cuando :)
- Genera un archivo de registro de analizador
El primero es autoexplicativo, pero descubrí que mi configuración de Eclipse no tenía configurados los sitios de actualización, así que tuve que hacer ese desvío.
El segundo está oculto en el sitio simple en el menú Proyecto. El menú de Indización en Marte (Proyecto / Índice C-C ++) tiene "Crear archivo de registro del analizador". Este comando genera un registro relacionado con la forma en que funciona cuando el indexador analiza el archivo que está "actualizado" en el editor (es decir, aquel en el que puede ver los squigglies rojos en este momento). Genere ese registro y se abrirá automáticamente en una pestaña del editor. Si el indexador tiene un error, podría informar algo interesante en este registro. En mi caso, mostró que algunos encabezados como <memory>
no se analizaron. Eso era ciertamente cómo estaba actuando, también. Eso se informó abajo en la parte inferior del registro, debajo de toda la información sobre lo que se analizó con éxito. Eso me permitió centrar mi investigación en una búsqueda de errores en lugar de un error de configuración o corrupción de la base de datos. Afortunadamente, el error que me afligía se solucionó en una versión más nueva de Marte.