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?

Jonathan Cave
fonte
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
user72421
fonte
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