Bagaimana saya mengkompilasi silang aplikasi saya untuk arsitektur armhf Ubuntu 12.04 pada host Ubuntu 12.04 i386?

16

Saya punya aplikasi besar yang saya tulis. Saya berhasil mengkompilasi aplikasi dalam skenario berikut:

  • dalam kompilasi asli untuk host i386 yang menjalankan Ubuntu 12.04
  • asli pada PandaBoard yang menjalankan Ubuntu 12.04 (ini membutuhkan waktu lama)
  • menggunakan Qemu dan chroot pada PC host untuk target armhf PandaBoard (ini membutuhkan waktu sangat lama)

Saya ingin mengkompilasi silang aplikasi pada host i386 untuk dijalankan pada target seperti PandaBoard untuk menyelesaikan pembangunan secara tepat waktu. Sejauh ini upaya yang dilakukan menggunakan rantai alat arm-linux-gnueabihf di repositori telah menghasilkan binari yang tidak berjalan dengan benar. Pada tahap ini, saya tidak punya rencana untuk mengemas perangkat lunak.

Apa cara yang disarankan untuk mencapai kompilasi silang yang sukses?

Gua Jonathan
sumber
Kompilasi silang dengan toolchain lintas-kompiler harus bekerja, itulah gunanya. Dengan cara apa binari tidak berjalan dengan benar?
Gilles 'SANGAT berhenti menjadi jahat'
Binari saya segera berakhir. strace tampaknya mengindikasikan bahwa libc.so.6 tidak sesuai dengan yang diharapkan.
Jonathan Cave
Itu harus diperbaiki dengan opsi tautan (saya tidak tahu yang mana begitu saja). Apakah sistem target menjalankan Ubuntu?
Gilles 'SANGAT berhenti menjadi jahat'
Ya target juga menjalankan Ubuntu 12.04. Saya berpikir mungkin saya perlu menggunakan opsi --sroroot ke kompiler dan tautan, tetapi ini dinonaktifkan di rantai alat Ubuntu.
Jonathan Cave
Toolchain Hanya Bekerja untuk saya, pada 12,04. Saya baru saja mengujinya di amd64, dan berhasil menjalankan biner yang diproduksi di server armhf. Tapi saya tidak punya mesin build i386. Jika Anda masih mengalami masalah, Anda perlu menguraikan. Apa kata ldd? Apa yang Anda lihat dari strace yang membawa Anda pada kesimpulan Anda? Lihat apakah Anda dapat mengurangi masalah Anda menjadi test case sederhana yang seharusnya bekerja dengan jelas, dan sajikan langkah-langkah yang Anda ambil secara detail.
Robie Basak

Jawaban:

6

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

https://wiki.ubuntu.com/MultiarchCross

Ubuntu memiliki cross-toolchain, apt-get install gcc-arm-linux-gnueabihftetapi bekerja pada toolchain gen berikutnya dibahas di sini: http://gsoc.sitedethib.com/posts/apt-get_install_gcc-4.7-arm-linux-gnueabihf/

Ada sejumlah solusi yang diperlukan pada saat ini. Misalnya, jika Anda menggunakan tautan tidak langsung (tercakup dalam halaman linaro wiki.) Anda juga harus menghindari menjalankan binari asing segera setelah kompilasi.

Juga, ini benar-benar paling matang dengan autotool.

Saya mendapatkan paket saya untuk melakukan cross-compile dengan cukup cepat.

apt-get build-dep -aarmhf foo-pkg
apt-get source foo-pkg
cd foo-pkg-*
dpkg-buildpackage -aarmhf
pengguna72421
sumber
3
Tolong jelaskan apa langkah-langkah ini lakukan, dan apa saklar -armarm. Mereka tidak akrab bagi banyak pengguna, mengharuskan mereka untuk mencari lapisan lain lebih dalam untuk mendapatkan jawaban yang dapat digunakan. Terima kasih.
garyp