Problemas de compilação cruzada com o GCC / G ++

6

Estou usando o gcc para compilar um aplicativo C ++ no meu servidor de CI ( link ) e como os vps nos quais ele é compilado tem a arquitetura x86-64 que eu preciso para cross-compilar para obter o programa compilado para trabalhar em computadores x86.

Instalei o gcc-multilib e o g ++-multilib e vários outros pacotes que foram sugeridos em outros lugares, mas ainda recebo um erro ao tentar compilar. É:

/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/libstdc++.so when searching for -lstdc++
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/libstdc++.a when searching for -lstdc++
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/libstdc++.so when searching for -lstdc++
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/libstdc++.a when searching for -lstdc++
/usr/bin/ld: cannot find -lstdc++
collect2: ld returned 1 exit status

Os registros completos estão disponíveis aqui: link

Qualquer ajuda para resolver este problema seria muito apreciada.

Editar:

/usr/bin/ld: i386:x86-64 architecture of input file '/usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../../lib/crt1.o' is incompatible with i386 output
/usr/bin/ld: i386:x86-64 architecture of input file '/usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../../lib/crti.o' is incompatible with i386 output
/usr/bin/ld: i386:x86-64 architecture of input file '/usr/lib/gcc/x86_64-linux-gnu/4.4.5/crtbegin.o' is incompatible with i386 output
/usr/bin/ld: i386:x86-64 architecture of input file '/usr/lib/gcc/x86_64-linux-gnu/4.4.5/crtend.o' is incompatible with i386 output
/usr/bin/ld: i386:x86-64 architecture of input file '/usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../../lib/crtn.o' is incompatible with i386 output
/usr/bin/ld: final link failed: Invalid operation

Eu recebo isso depois de ter corrigido o problema anterior.

    
por hifkanotiks 03.02.2013 / 15:13

3 respostas

3
  • Instale libs de 32 bits ( ia32-libs em algumas distros, passando para isso: link em outras, mais sobre isso se você pedir por isso).
  • Certifique-se de adicionar o caminho da biblioteca i386 ao seu LD_LIBRARY_PATH env. variável. (certamente export LD_LIBRARY_PATH = ${LD_LIBRARY_PATH}:/lib32:/usr/lib32:/usr/lib/i386-linux-gnu e assim um).
  • Certifique-se de adicionar o caminho de inclusão do i386 à sua variável de ambiente LD_INCLUDE_PATH .

Sinta-se à vontade para procurar por essas bibliotecas (uma vez instaladas, é claro), usando:

find / -iname "*libstdc++.so*" 2> /dev/null

por exemplo, para a biblioteca libstdc++.so . find deve reportar algum caminho que você poderá adicionar à sua variável de ambiente LD_LIBRARY_PATH .

    
por user129005 06.02.2013 / 16:03
1

Existem duas opções que o pode funcionar:

  1. Instale o pacote ia32-libs executando sudo apt-get install ia32-libs . É apenas um palpite, pode ou não funcionar.
  2. Outra solução pode ser instalar um linux de 32 bits em uma máquina virtual para compilar o código.

Este link pode ajudar:  - link

    
por green 06.02.2013 / 09:15
1

Seria melhor você fazer um chroot i386. mk-sbuild (no ubuntu-dev-tools) e schroot tornam isso muito fácil de gerenciar.

    
por Colin Watson 10.02.2013 / 17:21