Programación General > C/C++
Compilación cruzada
GsOiD:
Ups, lo envié sin explicar cómo he hecho el trabajo... Esto lo hice desde un linux-ubuntu11.04 Intel para un onjetivo: sparc con sun-solaris2.10
LO QUE APARECE DESPUÉS DE CADA ! ES UN COMENTARIO.
Bien, aquí les va// todo lo hago como root, esto porque puedo, y además si estoy como usuario y luego me paso a root para hacer los make install, las variables de entorno "desaparecen" los valores que les asigné, y tendría que reasignar valores y eso me dió flojera.. pero lo recomendable es no trabajar como root...
--- Citar ---a) Establecer las variables de entorno temporales, para la seción que inicie.
$ export TARGET=sparc-sun-solaris2.10 !especifico el objetivo, al tipear $ gcc -dumpmachine en la máquina objetivo obtuve sparc-sun-solaris2.10
$ export PREFIX=$HOME/cross !aquí indico el directorio en donde surgirá la magia, el cual aún no existe
$ export SYSROOT=$PREFIX/sysroot !aquí especifico el directorio en donde almacenaré las bibliotecas y headers del sis objetivo que se requieren...
$ export PATH=$PREFIX/bin/:$PATH
b)Crear la estructura de directorios para la compilación:
$ mkdir $PREFIX !crea el directorio /cross dentro de /home/yo
$ mkdir $SYSROOT !crea el directorio /sysroot dentro de /home/yo/sysroot
c) Copiando las bibliotecas y headers del sistema objetivo necesarias... lo hago remotamente... dentro de sysroot
$ cd $SYSROOT ! que equivale a $ cd /home/yo/cross/sysroot
$ ssh tss-3-04@ce.azc.uam.mx "tar -cf - /usr/local/include" | tar -xvf -
$ ssh tss-3-04@ce.azc.uam.mx "tar -cf - /usr/lib" | tar -xvf -
$ ssh tss-3-04@ce.azc.uam.mx "tar -cf - /usr/openwin/include" | tar -xvf -
$ ssh tss-3-04@ce.azc.uam.mx "tar -cf - /usr/X11/include" | tar -xvf -
$ ssh tss-3-04@ce.azc.uam.mx "tar -cf - /usr/dt/lib" | tar -xvf -
$ ssh http://ftp.gnu.org/gnu/binutils/binutils-2.21.tar.gz ! descargo binutils
$ wget http://ftp.gnu.org/gnu/gcc/gcc-4.6.0/gcc-4.6.0.tar.gz ! descargo gcc
$ tar -xvzf binutils-2.21.tar.gz ! descomprimo binutils-2.21.tar.gz
$ cd binutils-build ! ingreso al directorio binutils-build
$ ../binutils-2.21/configure --target=$TARGET --prefix=$PREFIX --disable-nls --disable-werror --with-sysroot=$SYSROOT -v ! configuro binutils
$ make
$ make install ! instalo una vez configurado y todo
$ cd .. ! me salgo de binutils-build y regreso a /buil
$ tar -xvzf gcc-4.6.0.tar.gz ! descomprimo gcc-4.6.0.tar.gz
$ cd gcc-build ! ingreso a gcc-build
$ ../gcc-4.6.0/configure --target=$TARGET --prefix=$PREFIX --disable-nls --disable-shared --disable-multilib --disable-target-libiberty --disable-target-zlib --enable-languages=c --without-ppl --without-cloog --with-sysroot=$SYSROOT -v ! configuro gcc
$ make
$ make install
LISTO !!!!!
e) Probando
! Dentro de /home/yo/cross guardo un programa en c ... yo probé un hola mundo... el clásico. n__n Lo coloqué ahí, porque ese es mi entorno de compilación... en otro lado esto no funcionará.
$ $PREFIX/bin/$TARGET-gcc hola.c -o hello ! para compilar de forma cruzada hago eso. No confundas $ que es el prompt de linux con el que indica que vas a usar el valor de la variable de entorno.
Ahora debes ver un ejecutable llamado hello .... te reto a que lo ejecutes en tu sistema host. :rolleyes: No se puede... a mi me arrojó esto:
bash: ./hello: no se puede ejecutar el fichero binario
Entonces copié a mi máquina remota, el ejecutable, para probar si funciona ahí....
$ scp hello tss-3-04@ce.azc.uam.mx ! ahora ingresé a la máquina remota para ejecutar directamente el archivo que copie. :comp: Escribo la contraseña.
$ cd carla !entro al directorio donde debe estar mi archivo "hello"
$ ./hello ! ya que lo ví, lo ejecuto.
Hola Carla, bienvenida al mundo !!! ! ese fue el resultado de mi programa... así que si funciona....
Ahora estoy lista para compilar cualquier cosa que desee ejecutar en el sparc :good:
Referencias:
1.- http://www.cis.upenn.edu/~milom/cross-compile.html
2.- http://www.escomposlinux.org/lfs-es/lfs ... pass1.html
3.- http://www.linuxfromscratch.org/lfs/vie ... pass1.html
Cualquier duda mandarme un mensaje :hola:
--- Fin de la cita ---
Navegación
[*] Página Anterior
Ir a la versión completa