quarta-feira, 3 de setembro de 2008

Compilando o GCC no HP-UX 11.X

Neste post explicarei como compilar seu próprio GCC no HP-UX 10.x.

No ambiente onde trabalho, um de nosso objetivos é suportar o maior número possível de versões de HP-UX. Por isso usamos o GCC versão 3.4.4 por conta das chatices de incompatibilidade da libc.
Com isso, conseguimos gerar binários que funcionam tanto nos sistemas antigos quanto nos novos. E acredite, muitos clientes tem ambientes bastante desatualizados.
Como regra geral eles pensam: para que atualizar se esta funcionando 100% e eu não preciso das novas features ? Até faz sentido. Mas nem irei entrar no mérito das conseqüências deste tipo de atitude. Principalmente questões de segurança.

Bom, voltando ao que interessa.....

Eu uso o GCC apenas para compilar código C/C++ e por isso neste exemplo irei usar apenas os pacotes que interessam: (i) gcc-core e (2) gcc-g++.

Agora vamos aos passos para compilar o GCC 3.4.4 no HP-UX 11.23

1. Instalar uma distribuição binária do GCC. Este GCC será usado para compilar o seu GCC "customizado". Pode ser inclusive um GCC 4.x. Tentei compilar usando o compilador C do HP mas não teve jeito. Após muita dor de cabeça resolvi usar o próprio GCC. Após a instalação, os binários do GCC estarão localizados em /usr/local/bin

2. Adicionar no PATH a pasta onde estão os binários do GCC. (export PATH=$PATH:/usr/local/bin)

3. Setar a variável de ambiente CC para gcc (export CC=gcc)

4. Extrair os fontes do GCC. ex: /opt/gcc-3.4.4

5. Configurar o build do GCC. É obrigatório usar o linker e assembler da GNU. A linha de comando final seria "./configure –prefix=/opt/gcc –enable-threads –with-gnu-as –with-gnu-ld –with-languages=c,c++"

6. Remover o assembler da HP do PATH.

7. Corrigir o header math.h. Pelo menos no meu pacote veio faltando um #endif. Para corrigir basta inserir um #endif no final do arquivo math.h. Talvez se a plataforma não for IA64 isso não é necessário. Enfim, só faça se algum erro no math.h interromper o build.

8. Compilar o pacote. make

9. Criar a pasta de instalação. Em meu caso sempre uso /opt/gcc/ (mkdir /opt/gcc)

10. Instalar pacote. (make install)

Se tudo correr bem, neste ponto você terá uma distribuição completa do GCC instalada em /opt/gcc. Adicione a pasta /opt/gcc/bin no seu PATH e seja feliz.

Agora você pode remover o pacote binário que você instalou anteriormente.

Bom, por hoje vou ficar aqui.
Em outro post irei explicar como fazer binários estáticos que pode ser executados em qualquer ambiente com qualquer versão do HP-UX. Você vai precisar dos arquivos objetos gerados na compilação do GCC para gerar a libstdc++.a e a sua própria distribuição da libstdc++.so.

Se você tem muitos componentes é uma boa idéia enviar sua versão do libstdc++.so junto com seus pacotes. Assim você garante que não vai haver conflitos com diferentes versões desta shared library instaladas por ai nos ambientes insanamente genéricos que os clientes possuem.

Abraços.

Leonardo X. T. Cardoso

0 comentários: