PDA

Ver la versión completa : Duda con compilador cruzado



Segata Sanshiro
01/04/2013, 19:09
Estoy intentando hacer un programa simple que usa ncurses, usando Eclipse Juno como IDE y con un compilador cruzado para la Raspberry Pi. El IDE ya lo he configurado y usado anteriormente para compilar para la rpi varios programas, que usan librerías estándar y no estándar (como wiringpi).

Sin embargo, el más simple de los programas no compila. Las dos primeras líneas son:


#include <ncurses.h>
#include <string.h>

Me marca un error en la primera línea diciendo:


fatal error: ncurses.h: No such file or directory

Cuando tanto string.h como ncurses.h están en /usr/include

¿Qué puede estar pasando?

swapd0
01/04/2013, 20:58
Si es una libreria tuya o externa pero no es una estándar de C/C++ y ncurses tiene pinta de serlo, los includes van con comillas "".

Y ya si eres quisquilloso se supone que en vez de string.h deberias poner cstring sin .h, esto es de los ultimos estandares,

GameMaster
01/04/2013, 21:03
que va, las comillas es para pillarlos de rutas relativas/locales, los "<", ">" es para pillarlos de las carpetas configuradas en el compilador...

-----Actualizado-----

en tu caso ponle la ruta completa usando comillas o configura el path en el entorno, ya que el compilador no tiene configurado ese path en las carpetas include

swapd0
01/04/2013, 21:05
que va, las comillas es para pillarlos de rutas relativas/locales, los "<", ">" es para pillarlos de las carpetas configuradas en el compilador...

-----Actualizado-----

en tu caso ponle la ruta completa usando comillas o configura el path en el entorno, ya que el compilador no tiene configurado ese path en las carpetas include
Si, y se supone que en las rutas del compilador tendras las librerias estandar de C/C++ y en tu proyecto le añades los path a tus librerias o a otras externas.

La verdad es que mi respuesta es un poco cutre por intentar responder rapido.

Segata Sanshiro
01/04/2013, 21:06
Lo de las comillas ya lo había probado, y por desgracia no va :(

Voy a echar un vistazo a las rutas como dice GameMaster, aunque creía que el compilador miraba por defecto en /usr/include. Ahora os cuento.

juanvvc
01/04/2013, 21:58
Si estás compìlado en cruzado, las librerías NO son las de /usr/include (esas son las locales para el sistema) sino las de dondeestéelsdkcruzado/include

Normalmente es un sibdirectorio de /opt. Por ejemplo, para compilación cruzada en Wiz las librerías están en algo así como /opt/openwiz/include

Este es el directorio que le tienes que pasar al compilador con -I. Si le pasas /usr/include, entonces no estarías compilando cruzado :)

Segata Sanshiro
01/04/2013, 21:59
Gracias a los dos, efectivamente el .h no estaba donde tenía que estar y lo he copiado a la carpeta correspondiente (es decir, lo que dice juanvvc).

Ahora me salen varios undefined reference, pero solo cuando uso algunas funciones de ncurses (por ejemplo, curs_set), pero no con otras (como mvprintw).

He encontrado referencias al problema en páginas como ésta: http://www.raspberrypi.org/phpBB3/viewtopic.php?t=13945&p=145035 pero no se soluciona a pesar de seguir los mismos pasos.

Además, me sale un warning:

libtinfo.so.5, needed by /home/rpidev/binarios_rpi_ncurses/libtinfo.so, not found (try using -rpath or -rpath-link)

A pesar de que libtinfo, etc. están todos en esa carpeta.

GameMaster
01/04/2013, 22:03
tienes que configurar tb la ruta de las libs

Segata Sanshiro
01/04/2013, 22:39
Ya ha compilado, el problema es que no siempre es una solución correcta suponer que libtinfo puede usarse de manera intercambiable con libncurses (o algo así xD). He tenido que buscar el libtinfo.so correcto y dejarlo con el resto de librerías. Gracias a todos de nuevo.