Wie übersetze ich meine Anwendung für Ubuntu 12.04 armhf architecture auf einen Ubuntu 12.04 i386-Host?

16

Ich habe eine große Bewerbung, die ich geschrieben habe. Ich kann die Anwendung in den folgenden Szenarien erfolgreich kompilieren:

  • in einer nativen Kompilation für den i386-Host unter Ubuntu 12.04
  • nativ auf einem PandaBoard mit Ubuntu 12.04 (dies dauert lange)
  • Verwenden von Qemu und einer Chroot auf dem Host-PC für das armhf PandaBoard-Ziel (dies dauert sehr lange)

Ich möchte die Anwendung auf dem i386-Host übergreifend kompilieren, um sie auf einem Ziel wie dem PandaBoard auszuführen und Builds zeitnah abzuschließen. Bisherige Versuche, die Toolkette arm-linux-gnueabihf in den Repositorys zu verwenden, haben zu Binärdateien geführt, die nicht ordnungsgemäß ausgeführt werden. Gegenwärtig habe ich keine Pläne, die Software zu verpacken.

Was ist der empfohlene Weg, um eine erfolgreiche Cross-Kompilierung zu erreichen?

Jonathan Cave
quelle
Das Cross-Compilieren mit der Cross-Compiler-Toolchain sollte funktionieren, dafür ist es da. Inwiefern laufen die Binaries nicht richtig?
Gilles 'SO- hör auf böse zu sein'
Meine Binärdateien werden fast sofort beendet. strace scheint darauf hinzudeuten, dass libc.so.6 nicht dort ist, wo es erwartet wird.
Jonathan Cave
Das sollte durch eine Linkoption reparierbar sein (ich weiß nicht, welche sofort). Läuft auf dem Zielsystem Ubuntu?
Gilles 'SO- hör auf böse zu sein'
Ja, auf dem Ziel läuft auch Ubuntu 12.04. Ich hatte gedacht, dass ich vielleicht die Option --sysroot für den Compiler und den Linker verwenden müsste, aber dies ist in der Ubuntu-Toolchain deaktiviert.
Jonathan Cave
Die Toolchain funktioniert bei mir am 12.04. Ich habe es gerade auf amd64 getestet und die auf einem armhf-Server erzeugte Binärdatei erfolgreich ausgeführt. Aber ich habe keine i386-Build-Maschine zur Hand. Wenn Sie immer noch Probleme haben, müssen Sie dies genauer erläutern. Was sagt ldd? Was haben Sie von der Straße gesehen, die Sie zu Ihrem Ergebnis geführt hat? Versuchen Sie, Ihr Problem auf einen einfachen Testfall zu reduzieren, der eindeutig funktionieren sollte, und stellen Sie die von Ihnen ausgeführten Schritte im Detail vor.
Robie Basak

Antworten:

6

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

https://wiki.ubuntu.com/MultiarchCross

Ubuntu hat eine toolchainübergreifende, apt-get install gcc-arm-linux-gnueabihfaber die Arbeit an der Toolchain der nächsten Generation wird hier diskutiert: http://gsoc.sitedethib.com/posts/apt-get_install_gcc-4.7-arm-linux-gnueabihf/

Es gibt eine Reihe von Problemumgehungen, die an dieser Stelle erforderlich sind. Wenn Sie beispielsweise indirekte Verknüpfungen verwenden (siehe die Wiki-Seite von Linaro), sollten Sie auch vermeiden, fremde Binärdateien direkt nach dem Kompilieren auszuführen.

Außerdem ist es mit Autotools am ausgereiftesten.

Ich habe mein Paket ziemlich schnell zum Cross-Compilieren gebracht.

apt-get build-dep -aarmhf foo-pkg
apt-get source foo-pkg
cd foo-pkg-*
dpkg-buildpackage -aarmhf
user72421
quelle
3
Erklären Sie bitte, was diese Schritte bewirken und was der Schalter -aarmhf ist. Sie sind vielen Benutzern nicht vertraut und erfordern, dass sie noch eine weitere Ebene tiefer suchen, um eine brauchbare Antwort zu erhalten. Vielen Dank.
Garyp