você está aqui: Home  → Arquivo de Mensagens

Criando um Cross Compiler entre Linux e Solaris

Colaboração: André Marques Saunite

Data de Publicação: 28 de fevereiro de 2011

Eu trabalho muito com servidores Solaris 10 Sparc e, como qualquer bom servidor, não temos instalados compiladores neles, como minha estação de trabalho é Linux x86_64 e nem sempre tenho uma máquina Sparc com Solaris disponível para instalar um compilador, eu resolvi pesquisar para criar um GCC Cross Compiler entre meu Debian Linux x86_64 e um Solaris 10 Sparc, o que tem funcionado muito bem para os casos que venho necesitado.

A primeira coisa é baixar o códogo fonte do "binutils" e "gcc" eu utilizei o binutils versão 2.21.0.20110216 e o gcc versão 4.4.2.

Os código fonte podem ser encontrados aqui: http://ftp.gnu.org/gnu/binutils/

e aqui: http://ftp.gnu.org/gnu/gcc/

(Para o binutils eu peguei pelo apt-get source binutils)

Configurando o ambiente

  export TARGET=sparc-sun-solaris2.10
  export PREFIX=/opt/solaris-cross-compiler/
  export SYSROOT=$PREFIX/sysroot/
  mkdir -p $SYSROOT

Copiando Bibliotecas

Para que os programas que forem criados utilizem as bibliotecas corretas do solaris, precisamos copiar as bibliotecas do servidor solaris para nossa máquina, os que deve ser feito é o seguinte:

  Copiar /usr/include do Solaris para $SYSROOT/usr/include da sua máquina;
  Copiar /usr/local/include do Solaris para $SYSROOT/usr/local/include/ da sua máquina;
  Copiar /lib do Solaris para $SYSROOT/usr/local/include/ da sua máquina;
  Copiar /usr/lib do Solaris para $SYSROOT/usr/lib/ da sua máquina;
  Copiar /usr/local/lib do Solaris para $SYSROOT/usr/local/lib/ da sua máquina;

Caso também necessite criar programas gráficos, talvez necessite também:

  Copiar /usr/openwin/include do Solaris para $SYSROOT/usr/openwin/include da sua máquina;
  Copiar /usr/dt/include do Solaris para $SYSROOT/usr/dt/include da sua máquina;
  Copiar /usr/X11/include do Solaris para $SYSROOT/usr/X11/include da sua máquina;
  Copiar /usr/openwin/lib do Solaris para $SYSROOT/usr/openwin/lib da sua máquina;
  Copiar /usr/dt/lib do Solaris para $SYSROOT/usr/dt/lib da sua máquina;
  Copiar /usr/X11/lib do Solaris para $SYSROOT/usr/X11/lib da sua máquina;

Criando ambiente de compilação

  mkdir $PREFIX/sources/
  cd $PREFIX/sources/

Baixe os códigos fontes do binutils e gcc para o diretório $PREFIX/sources;

Compilando binutils

  $ tar -xvzf binutils-2.21.0.20110216.tar.gz
  $ mkdir build-binutils
  $ cd build-binutils/
  $ ../binutils-2.21.0.20110216/configure -target=$TARGET --prefix=$PREFIX -with-sysroot=$SYSROOT -v
  $ make
  $ make install

Compilando GCC

Antes de instalar o GCC eu tive que instalar os pacotes libmpfr-dev e libgmp3-dev.

  $ tar -xvzf gcc-4.4.2.tar.gz
  $ mkdir build-gcc
  $ cd build-gcc
  $ ../gcc-4.4.2/configure --target=sparc-sun-solaris2.10 --with-gnu-as
  --with-gnu-ld  --prefix=$PREFIX -with-sysroot=$SYSROOT --disable-libgcj
  --enable-languages=c,c++ --enable-threads --with-cpu=ultrasparc
  --with-headers=$SYSROOT/usr/include/ --with-libs=$SYSROOT/lib/
  --disable-multilib --without-newlib --disable-shared --disable-nls -v
  $ make
  $ make install

Testando

Crie um bom e velho helloWorld.c com o conteúdo:

  #include < stdio.h>
  void main () {
        printf ("Hello World!\n");
  }

Compile:

  $ $PREFIX/bin/sparc-sun-solaris2.10-gcc helloWorld.c -o helloWorld.solaris

Verifique se está com o formato correto:

  $ file helloWorld.solaris
  helloWorld.solaris: ELF 32-bit MSB executable, SPARC32PLUS, V8+ Required,
  version 1 (SYSV), dynamically linked (uses shared libs), not stripped

Se está assim, é só copiar o binário para o Solaris 10 e executar!

Fontes de pesquisa:



Veja a relação completa dos artigos de André Marques Saunite