Como compilar meu aplicativo para a arquitetura Ubuntu 12.04 armhf em um host Ubuntu 12.04 i386?


16

Eu tenho um aplicativo grande que eu escrevi. Posso compilar com êxito o aplicativo nos seguintes cenários:

  • em uma compilação nativa para o host i386 executando o Ubuntu 12.04
  • nativamente em um PandaBoard executando o Ubuntu 12.04 (isso leva muito tempo)
  • usando o Qemu e um chroot no PC host para o alvo do armhf PandaBoard (isso leva muito tempo)

Eu gostaria de compilar o aplicativo no host i386 para executar em um destino como o PandaBoard para concluir as compilações em tempo hábil. Até agora, as tentativas feitas usando a cadeia de ferramentas arm-linux-gnueabihf nos repositórios produziram binários que não são executados corretamente. Nesta fase, não tenho planos de empacotar o software.

Qual é a maneira recomendada de obter uma compilação cruzada bem-sucedida?


A compilação cruzada com a cadeia de ferramentas do compilador cruzado deve funcionar, é para isso que serve. De que maneira os binários não são executados corretamente?
— Gilles 'SO- stop be evil'

Meus binários terminam quase imediatamente. strace parece indicar que libc.so.6 não está onde se espera que esteja.
— Jonathan Cave

Isso deve ser corrigido por uma opção de link (não sei qual deles de imediato). O sistema de destino está executando o Ubuntu?
— Gilles 'SO- stop be evil'

Sim, o destino também está executando o Ubuntu 12.04. Eu pensei que talvez eu precisasse usar a opção --sysroot para o compilador e o vinculador, mas isso está desativado na cadeia de ferramentas do Ubuntu.
— Jonathan Cave

O conjunto de ferramentas Apenas funciona para mim, em 12.04. Acabei de testá-lo no amd64 e executei com êxito o binário produzido em um servidor armhf. Mas eu não tenho uma máquina de compilação i386 à mão. Se você ainda estiver tendo problemas, precisará elaborar. O que diz o ldd? O que você viu do traço que o levou à sua conclusão? Veja se você pode reduzir seu problema a um caso de teste simples que deve funcionar claramente e apresente as etapas que você está executando em detalhes.
— Robie Basak

Respostas:


6

https://wiki.linaro.org/Platform/DevPlatform/CrossCompile/UsingMultiArch

https://wiki.ubuntu.com/MultiarchCross

O Ubuntu possui uma cadeia de ferramentas cruzadas, apt-get install gcc-arm-linux-gnueabihfmas o trabalho na cadeia de ferramentas de última geração é discutido aqui: http://gsoc.sitedethib.com/posts/apt-get_install_gcc-4.7-arm-linux-gnueabihf/

Há várias soluções alternativas necessárias neste momento. Por exemplo, se você usar o link indireto (coberto na página wiki do linaro). Você também deve evitar executar binários estrangeiros logo após compilá-los.

Além disso, é realmente mais maduro com as ferramentas automáticas.

O meu pacote foi compilado rapidamente.

apt-get build-dep -aarmhf foo-pkg
apt-get source foo-pkg
cd foo-pkg-*
dpkg-buildpackage -aarmhf

3
Por favor, explique o que essas etapas fazem e qual é a opção -aarmhf. Eles não são familiares para muitos usuários, exigindo que eles pesquisem mais uma camada para obter uma resposta útil. Obrigado.
— Garyp
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.