Come posso compilare in modo incrociato la mia applicazione per l'architettura armhf di Ubuntu 12.04 su un host Ubuntu 12.04 i386?


16

Ho una grande domanda che ho scritto. Posso compilare correttamente l'applicazione nei seguenti scenari:

  • in una compilation nativa per l'host i386 che esegue Ubuntu 12.04
  • nativamente su un PandaBoard con Ubuntu 12.04 (questo richiede molto tempo)
  • usando Qemu e un chroot sul PC host per il target PandaBoard armhf (questo richiede molto tempo)

Vorrei eseguire la compilazione incrociata dell'applicazione sull'host i386 per l'esecuzione su un target come PandaBoard per completare le build in modo tempestivo. Finora i tentativi fatti usando la catena di strumenti arm-linux-gnueabihf nei repository hanno prodotto binari che non funzionano correttamente. In questa fase, non ho intenzione di impacchettare il software.

Qual è il modo consigliato per ottenere una compilazione incrociata corretta?


La compilazione incrociata con la toolchain del compilatore incrociato dovrebbe funzionare, ecco a cosa serve. In che modo i binari non funzionano correttamente?
Gilles 'SO- smetti di essere malvagio'

I miei binari terminano quasi immediatamente. strace sembra indicare che libc.so.6 non è dove dovrebbe essere.
Jonathan Cave

Dovrebbe essere risolvibile con un'opzione di collegamento (non so quale di seconda mano). Il sistema di destinazione esegue Ubuntu?
Gilles 'SO- smetti di essere malvagio'

Sì, il target esegue anche Ubuntu 12.04. Avevo pensato che forse avrei dovuto usare l'opzione --sysroot per il compilatore e il linker, ma questo è disabilitato nella toolchain di Ubuntu.
Jonathan Cave,

La toolchain funziona solo per me, il 12.04. L'ho appena testato su amd64 e ho eseguito con successo il binario che ha prodotto su un server armhf. Ma non ho una macchina build i386 a portata di mano. Se i problemi persistono, è necessario elaborarli. Cosa dice ldd? Cosa hai visto dalla strage che ti ha portato alla tua conclusione? Verifica se riesci a ridurre il tuo problema a un semplice caso di test che dovrebbe funzionare in modo chiaro e presenta i passaggi che stai prendendo in dettaglio.
Robie Basak,

Risposte:


6

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

https://wiki.ubuntu.com/MultiarchCross

Ubuntu ha una cross-toolchain, apt-get install gcc-arm-linux-gnueabihfma il lavoro sulla toolchain di prossima generazione è discusso qui: http://gsoc.sitedethib.com/posts/apt-get_install_gcc-4.7-arm-linux-gnueabihf/

A questo punto sono necessarie diverse soluzioni alternative. Ad esempio, se si utilizza il collegamento indiretto (descritto nella pagina wiki di Linaro). È inoltre consigliabile evitare di eseguire binari esterni subito dopo averli compilati.

Inoltre, è davvero più maturo con gli autotools.

Ho avuto il mio pacchetto per la compilazione incrociata abbastanza veloce.

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

3
Spiegare cosa fanno questi passaggi e cos'è l'interruttore -aarmhf. Non sono familiari a molti utenti, che richiedono loro di cercare un altro livello più in profondità per ottenere una risposta utilizzabile. Grazie.
Garyp,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.