Compilador Cruzado (cross compiler)

Un compilador cruzado o cross compiler es un compilador capaz de crear código ejecutable para otra plataforma distinta a aquélla en la que él se ejecuta. Esta herramienta es útil cuando quiere compilarse código para una plataforma a la que no se tiene acceso, o cuando es incómodo (compilar para windows ;)) o imposible compilar en dicha plataforma (como en el caso de los sistemas embebidos).

Un ejemplo de un compilador con estas posibilidades es el NASM, que puede ensamblar, entre otro formatos, ELF (para sistemas UNIX) y COM (para DOS).

Uso de los compiladores cruzados

El uso fundamental de un compilador cruzado es compilar para un entorno diferente en el que se ejecuta el compilador. Esto es muy utilizado en las siguientes situaciones:

  • Sistemas empotrados, dónde los recursos son extremadamente limitados.
  • Compilación para múltiples máquinas.
  • Necesitas un ejecutable para windows y no quieres usar windows para desarrollar. (mi caso)

Instalacion del cross-mingw en openSUSE 11.3

Lo primero es agregar el repositorio crosstoolchains a la lista de repositorios del sistema, para esto ejecutamos el comando:

Code:
[vampird@sharwyn]:~$ su - -c "zypper ar http://download.opensuse.org/repositories/CrossToolchain:/mingw/openSUSE_11.3/ repo-crosstoolchain"
Password:
Adding repository 'repo-crosstoolchain' [done]
Repository 'repo-crosstoolchain' successfully added
Enabled: Yes
Autorefresh: No
URI: http://download.opensuse.org/repositories/CrossToolchain:/mingw/openSUSE_11.3/

[vampird@sharwyn]:~$

luego actualizamos el cache y aceptamos la clave publica del repositorio con el comando:

Code:
[vampird@sharwyn]:~$ su - -c "zypper ref"
Password:
Repository 'Updates for openSUSE 11.3 11.3-1.82' is up to date.
Repository 'repo-contrib-standar' is up to date.
Retrieving repository 'repo-crosstoolchain' metadata [-]

New repository or package signing key received:
Key ID: 83245F71163CDAB4
Key Name: CrossToolchain:mingw OBS Project <CrossToolchain:mingw@build.opensuse.org>
Key Fingerprint: E688CDF91615FAAD6138E72883245F71163CDAB4
Key Created: Tue Jan 22 18:45:46 2008
Key Expires: Thu Apr 1 17:45:46 2010 (EXPIRED)
Repository: repo-crosstoolchain

Do you want to reject the key, trust temporarily, or trust always? [r/t/a/?] (r): a
Retrieving repository 'repo-crosstoolchain' metadata [done]
Building repository 'repo-crosstoolchain' cache [done]
Repository 'repo-emulators' is up to date.
Repository 'repo-games' is up to date.
Repository 'repo-java' is up to date.
Repository 'repo-kde4-core' is up to date.
Repository 'repo-kde4-extra' is up to date.
Repository 'repo-kde4-playground' is up to date.
Repository 'repo-kde4-updateapps' is up to date.
Repository 'repo-local' is up to date.
Repository 'repo-mozilla' is up to date.
Repository 'openSUSE-11.3-Non-Oss' is up to date.
Repository 'openSUSE-11.3-Oss' is up to date.
Retrieving repository 'repo-pacman' metadata [done]
Building repository 'repo-pacman' cache [done]
Retrieving repository 'openSUSE-11.3-Source' metadata [done]
Building repository 'openSUSE-11.3-Source' cache [done]
Repository 'repo-vlc' is up to date.
Retrieving repository 'repo-wine' metadata [done]
Building repository 'repo-wine' cache [done]
All repositories have been refreshed.
[vampird@sharwyn]:~$

y por ultimo instalamos el cross compiler con el comando:

Code:
[vampird@sharwyn]:~$ su - -c "zypper in cross-mingw-gcc"
Password:
Loading repository data...
Reading installed packages...
Resolving package dependencies...

The following NEW packages are going to be installed:
 cross-mingw-binutils cross-mingw-gcc cross-mingw-runtime cross-mingw-w32api 

4 new packages to install.
Overall download size: 23.9 MiB. After the operation, additional 174.4 MiB will be used.
Continue? [y/n/?] (y): y
Retrieving package cross-mingw-w32api-3.8-12.1.x86_64 (1/4), 1.3 MiB (21.5 MiB unpacked)
Retrieving: cross-mingw-w32api-3.8-12.1.x86_64.rpm [done (49.5 KiB/s)]
Installing: cross-mingw-w32api-3.8-12.1 [done]
Retrieving package cross-mingw-runtime-3.11_20061202_1-6.1.x86_64 (2/4), 547.0 KiB (11.8 MiB unpacked)
Retrieving: cross-mingw-runtime-3.11_20061202_1-6.1.x86_64.rpm [done (35.4 KiB/s)]
Installing: cross-mingw-runtime-3.11_20061202_1-6.1 [done]
Retrieving package cross-mingw-binutils-2.16.91_20060119_1-6.1.x86_64 (3/4), 969.0 KiB (8.1 MiB unpacked)
Retrieving: cross-mingw-binutils-2.16.91_20060119_1-6.1.x86_64.rpm [done (95.7 KiB/s)]
Installing: cross-mingw-binutils-2.16.91_20060119_1-6.1 [done]
Retrieving package cross-mingw-gcc-3.4.5_20060117_1-5.1.x86_64 (4/4), 21.1 MiB (132.9 MiB unpacked)
Retrieving: cross-mingw-gcc-3.4.5_20060117_1-5.1.x86_64.rpm [done (225.9 KiB/s)]
Installing: cross-mingw-gcc-3.4.5_20060117_1-5.1 [done]
[vampird@sharwyn]:~$

ahora solo falta un pequeño retoque para que quede comodo de usar, a que me refiero, los binarios del cross-mingw se instalan en /opt/cross/bin y los nombres:

Code:
[vampird@sharwyn]:~$ ls /opt/cross/bin/
i386-mingw32msvc-addr2line  i386-mingw32msvc-dlltool  i386-mingw32msvc-gcc-3.4.5  i386-mingw32msvc-objcopy  i386-mingw32msvc-strings
i386-mingw32msvc-ar         i386-mingw32msvc-dllwrap  i386-mingw32msvc-gccbug     i386-mingw32msvc-objdump  i386-mingw32msvc-strip
i386-mingw32msvc-as         i386-mingw32msvc-g++      i386-mingw32msvc-gcov       i386-mingw32msvc-ranlib   i386-mingw32msvc-windres
i386-mingw32msvc-c++        i386-mingw32msvc-g77      i386-mingw32msvc-ld         i386-mingw32msvc-readelf
i386-mingw32msvc-cpp        i386-mingw32msvc-gcc      i386-mingw32msvc-nm         i386-mingw32msvc-size
[vampird@sharwyn]:~$

por lo cual yo siempre agrego alias a los usados en mi archivo ~/.bashrc, los alias serian los siguientes:
alias cross-gcc=’/opt/cross/bin/i386-mingw32msvc-gcc’
alias cross-g++=’/opt/cross/bin/i386-mingw32msvc-g++’
alias cross-strip=’/opt/cross/i386-mingw32msvc/bin/strip’

=-=-=-=-=
Powered by Blogilo

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s


A %d blogueros les gusta esto: