Jak skompilować krzyżowo moją aplikację dla architektury armhf Ubuntu 12.04 na hoście Ubuntu 12.04 i386?

16

Mam dużą aplikację, którą napisałem. Mogę pomyślnie skompilować aplikację w następujących scenariuszach:

  • w natywnej kompilacji dla hosta i386 z systemem Ubuntu 12.04
  • natywnie na PandaBoard z systemem Ubuntu 12.04 (zajmuje to dużo czasu)
  • używanie Qemu i chroota na komputerze-hoście dla celu armhf PandaBoard (zajmuje to bardzo dużo czasu)

Chciałbym skompilować krzyżowo aplikację na hoście i386, aby działała na celu, takim jak PandaBoard, w celu terminowego ukończenia kompilacji. Dotychczasowe próby użycia łańcucha narzędzi arm-linux-gnueabihf w repozytoriach spowodowały, że pliki binarne nie działają poprawnie. Na tym etapie nie planuję pakietu oprogramowania.

Jaki jest zalecany sposób osiągnięcia udanej kompilacji krzyżowej?

Jonathan Cave
źródło
Kompilacja krzyżowa z zestawem narzędzi kompilatora krzyżowego powinna działać, po to jest. W jaki sposób pliki binarne nie działają poprawnie?
Gilles 'SO - przestań być zły'
Moje pliki binarne wygasają prawie natychmiast. strace wydaje się wskazywać, że libc.so.6 nie jest tam, gdzie powinien być.
Jonathan Cave
Powinno to zostać naprawione przez opcję linku (nie wiem, która z nich od razu). Czy w systemie docelowym działa Ubuntu?
Gilles 'SO - przestań być zły'
Tak, celem jest także Ubuntu 12.04. Pomyślałem, że może potrzebuję użyć opcji --sysroot w kompilatorze i linkerze, ale jest to wyłączone w łańcuchu narzędzi Ubuntu.
Jonathan Cave
Zestaw narzędzi Po prostu działa dla mnie, 12.04. Właśnie przetestowałem go na amd64 i z powodzeniem uruchomiłem binarne oprogramowanie wyprodukowane na serwerze armhf. Ale nie mam pod ręką maszyny do budowania i386. Jeśli nadal masz problemy, musisz to rozwinąć. Co mówi ldd? Co widziałeś po stracie, która doprowadziła cię do wniosku? Sprawdź, czy możesz zredukować swój problem do prostego przypadku testowego, który powinien wyraźnie zadziałać, i opisz szczegółowo podjęte kroki.
Robie Basak,

Odpowiedzi:

6

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

https://wiki.ubuntu.com/MultiarchCross

Ubuntu ma cross-toolchain, apt-get install gcc-arm-linux-gnueabihfale prace nad łańcuchem narzędzi nowej generacji zostały omówione tutaj: http://gsoc.sitedethib.com/posts/apt-get_install_gcc-4.7-arm-linux-gnueabihf/

Na tym etapie istnieje wiele obejść. Na przykład, jeśli używasz linkowania pośredniego (opisanego na stronie wiki linaro). Powinieneś także unikać uruchamiania obcych plików binarnych zaraz po ich skompilowaniu.

Ponadto jest naprawdę najbardziej dojrzały z automatycznymi narzędziami.

Mój pakiet dość szybko się skompilował.

apt-get build-dep -aarmhf foo-pkg
apt-get source foo-pkg
cd foo-pkg-*
dpkg-buildpackage -aarmhf
użytkownik72421
źródło
3
Wyjaśnij, co robią te kroki i czym jest przełącznik -aarmhf. Nie są one znane wielu użytkownikom, wymagając od nich przeszukania jeszcze jednej warstwy głębiej, aby uzyskać użyteczną odpowiedź. Dzięki.
garyp,