2012-07-26 9 views
8

Tengo Eclipse Juno para C/C++ desarrolladores instalados junto con GNU ARM C/C++ Development Support plug-in de http://sourceforge.net/projects/gnuarmeclipse.Eclipse no reconoce tipos de stdint.h para ARM Windows GCC toolchain

En mi proyecto estoy usando tipos como uint_32t, int16_t y uint8_t que normalmente proviene de stdint.h. Mientras forzaba al Eclipse a ver los encabezados estándar de mi compilador apuntando directamente al directorio donde se encuentra el directorio include, los tipos mencionados no se resuelven. Esto me da una gran cantidad de marcas rojas sobre símbolos no resueltos y algunos problemas con la finalización del código de las funciones declaradas con estos tipos.

El mismo problema es con las definiciones de macro estándar como GNUC - normalmente CDT vea esto para GNU C o GNU C++, pero con toolchain configurado para ARM Windows GCC no. Extraño.

¿Qué puedo hacer para resolver eso y devolver el impulso principal que Eclipse ofrece en cuanto a productividad?

Respuesta

7

Creo que encontré la solución a mi problema. El problema era el CDT GCC Builtin Compiler Settings proveedor, que intentó ejecutar el gcc en lugar de arm-elf-gcc. Agregué el prefijo al campo Command to get compiler specs: ¹ para invocar al compilador por su nombre propio.

Y voilà, desaparecieron todos los símbolos no resueltos.

Desafortunadamente, rompí mi proyecto cambiando las cadenas de herramientas (¡nunca lo haga si tiene instalado el plugin GNU ARM Eclipse!), Pero esa es otra historia.


¹ - Está bajo: Project Properties > C/C++ General > Preprocessor Include Paths, Macros etc., la pestaña Providers; Share settings entries between projects (global provider) tiene que estar desactivado para editar ese campo.

1

tenga en cuenta que GNU ARM Eclipse complementos se actualizaron en octubre de 2013, y la nueva versión tiene un mejor soporte para el descubrimiento de ruta, por lo que este problema es menos probable que ocurra.

cambiar las cadenas de herramientas también fue reparado.

+0

Esto debería publicarse mejor como comentario, no como una respuesta. –

+1

bien. mi primer intento fue publicar un comentario, pero fue rechazado (no hay suficientes derechos, o algo así). – ilg

+0

Hola Sr. @ LiviuIonescu, Por favor, eche un vistazo a esta pregunta: http://stackoverflow.com/questions/38033130/how-to-use-the-gdb-gnu-debugger-for-microcontroller-debugging Sé que usted es probablemente una de las pocas personas con conocimiento profundo sobre este tema. Muchas gracias por ayudar. –

1

Si está utilizando un archivo Makefile externo, Eclipse no tiene forma de saber dónde se encuentra su biblioteca estándar para la plataforma de destino. La solución, que he encontrado, es agregar la biblioteca incluye rutas a

Project->Preferences->C++ General->Paths and symbols.

0

Encontré una solución totalmente diferente a mi versión de este (famoso) problema. En mi caso, las rutas de búsqueda no eran el problema porque el compilador funcionaba bien. Sin embargo, el editor se quejó de los tipos de cstdint no resueltos en todas partes: muy molesto. Buscar en Google la solución utilizando la cadena del mensaje de error no fue fructífera y muy frustrante.

he encontrado la solución de este problema por casualidad en una respuesta ("Ahora hay una nueva manera de resolver esto sin la GXX_EXPERIMENTAL piratear") a la siguiente hilo:

Eclipse CDT C++11/C++0x support

Saludos

1

que tenían el mismo problema y la solución de this page ayudó a resolverlo:

  • Introduzca las propiedades del proyecto -> C/C++ -> Prep rocessor incluyen rutas, etc .-> Proveedores de
  • Haga clic en CDT GCC Construir Analizador de salida y cambiar el patrón de comandos del compilador de (gcc)|([gc]++)|(clang) a (arm-none-eabi-gcc)|([gc]++)|(clang)
  • clic en el botón aplicar
  • Haga clic en CDT incorporado configuración del compilador cruzado ARM y reemplazar ${COMMAND} con arm-none-eabi-gcc.
  • Haga clic en el botón Aplicar.
+0

no, no lo resolvió ... :( – sop

+0

Esto se debe a que '$ {FLAGS}' debe establecerse en los indicadores del compilador de su Makefile. – vaughan

1

En Project > Properties > C/C++ General > Preprocessor Include Paths > Providers:

  • Habilitar CDT GCC Built-in Compiler Settings Cross ARM.

  • Conjunto Command to get compiler specs a:

    arm-none-eabi-g++ ${FLAGS} ${cross_toolchain_flags} -E -P -v -dD "${INPUTS}".C 
    
    • La parte importante es la .C en el extremo. Esto generalmente se establece dependiendo del idioma. Se usa un pequeño .c para el código C, mientras que el gran C se usa para C++. Pero no hay idiomas especificados cuando se utiliza un archivo MAKE externo o con el conjunto de opciones no toolchain.
  • Además, echa Allocate console in the Console View para comprobar el comando se ejecuta correctamente y las variables están siendo correctamente sustituido.

  • Habilitar CDT GCC Build Output Parser y cambiar el patrón de comandos del compilador (gcc)|([gc]\+\+)|(clang)-(.*g++)|(.*gcc)|(.*[gc]\+\+) a continuación, aplicar los cambios. Use los botones Move up/down para moverlo por encima del CDT GCC Built-in Compiler Settings Cross ARM.


También tendrá que establecer Project > Properties > C/C++ General > Preprocessor Include Paths > Entries > CDT User Settings Entries a lo siguiente:

cdt user settings entries

En Preferences > String Substitutions tendrá que crear una var para gnu-arm-path apuntando a su casa cadena de herramientas.

Idealmente, estos se deben encontrar en CDT GCC Built-in Compiler Settings Cross ARM, pero en mi caso no lo son. Creo que tiene que ver con el hecho de que en un proyecto administrado, estas entradas están vinculadas a cada idioma. Pero con un archivo MAKE externo, el cuadro de lista de idiomas solo dice [Unspecified].


sistema de proveedor de escáner El Eclipse parece estar diseñado en torno a proyectos gestionados CDT, por lo que es un poco más difícil de conseguir trabajo cuando se utiliza un archivo MAKE externo.

Puede crear un nuevo proyecto administrado con un archivo MAKE externo y ver la consola de descubrimiento del escáner para ver cómo debería funcionar. Esto es lo que hice.

Cuestiones relacionadas