Bagaimana cara mengkompilasi silang program untuk Raspberry Pi dengan gcc?

8

Saya suka menggunakan gcc untuk mengkompilasi program C dan C ++ kecil kecil di komputer utama saya. Namun, saya juga memiliki Raspberry Pi, dan, sebagai komputer inti-tunggal 700-MHz, saya lebih suka tidak perlu melakukan pengembangan pekerjaan di atasnya setiap kali saya ingin membuat biner untuk itu. Bagaimana (karena saya tahu ada cara) bagaimana saya mengkompilasi silang program saya untuk Raspberry Pi menggunakan laptop x86 saya? Dan apakah ada cara agar saya dapat mengkompilasi program C (++) pada Pi tetapi menghasilkan x86 biner? Jika ada bantuan, "SoC adalah Broadcom BCM2835. Ini berisi ARM1176JZFS, dengan floating point ..." (sesuai dengan FAQ Raspberry Pi resmi ).

empatik
sumber
Ada juga Raspberry PI SE, di sini ada sebuah pertanyaan yang dapat membuat Anda berada di jalur yang benar: raspberrypi.stackexchange.com/questions/192/…
Lekensteyn
Jawaban yang bagus di sini: Cross-Compile untuk ARM?
nobar

Jawaban:

4

Menggunakan kombinasi mencari-cari di aptrepositori dan Building Embedded Linux Systems yang sangat bagus (edisi ke-2, 2008, O'Reilly), saya menemukan ini:

arm-linux-gnueabi-gcc

Itu adalah nama perintah dan paket yang Anda instal untuk mendapatkannya. Setelah dipanggil, ia bertindak persis seperti "vanilla" gcc, dengan satu-satunya pengecualian bahwa ia membangun paket untuk arsitektur ARM (atau subset termasuk BCM2835, setidaknya). Membangun Sistem Linux Tertanam (hal 93-94) menjelaskan bahwa nama-nama yang digunakan untuk memanggil alat GNU dengan cara kompilasi silang mengikuti format ini:

cpu-kernel-manufactuer-os

Di -gccakhir contoh paling atas adalah komponen , yang digunakan untuk menentukan bagian mana yang binutilsingin Anda gunakan. Ini dapat ditukar dengan komponen GNU toolchain lain, seperti ld(tautan) atau as(assembler). Sebab arm-linux-gnueabi-gcc, armadalah arsitektur, linuxadalah kernel, gnueabios, dan gcckomponen. Dimana pabrikannya? Rupanya, pabrikan dapat ditentukan sebagai "tidak dikenal", karena jarang membuat perbedaan, atau ditinggalkan sama sekali (termasuk itu akan membuat arm-linux-unknown-gnueabi-gcc).

empatik
sumber
1

Metode yang didokumentasikan secara resmi

https://www.raspberrypi.org/documentation/linux/kernel/building.md ( GitHub )

git clone https://github.com/raspberrypi/tools
export PATH="$(pwd)/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin:${PATH}"
printf '#include <stdio.h>\nint main() { puts("hello world"); }\n' > hello_world.c
printf '#include <iostream>\nint main() { std::cout << "hello world" << std::endl; }\n' > hello_world.cpp
arm-linux-gnueabihf-gcc -std=c99 -o hello_world_c hello_world.c
arm-linux-gnueabihf-g++ -std=c++11 -o hello_world_cpp hello_world.cpp

Diuji di Ubuntu 17.10, tool repo di 5caa7046982f0539cf5380f94da04b31129ed521

Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功
sumber
0

Saya tidak yakin 100%, tetapi, menggunakan https://tandrepires.wordpress.com/2012/08/01/raspberry-pi-openelec-pvr-dvb-t/ , Anda dapat mencoba: 1) Perpustakaan yang diperlukan:

sudo apt-get install g++ git nasm flex bison gawk gperf autoconf automake m4 cvs libtool \
byacc texinfo gettext zlib1g-dev libncurses5-dev git-core build-essential xsltproc libexpat1-dev zip \
autopoint xfonts-utils libxml-parser-perl libproc-processtable-perl default-jre

2) Kompilasi proyek dengan opsi-opsi berikut, di mana N adalah jumlah inti dari CPU x86 Anda:

$ PROJECT=RPi ARCH=arm PVR=yes make release -j N

Saya harap ini membantu. `

fernando garcía
sumber
Saya menghargai usaha, saya benar-benar melakukannya. Sayangnya, tutorial ini (dan baris kode yang sesuai) digunakan makeuntuk mengkompilasi sebuah proyek yang telah diatur untuk menggunakan make ("PROYEK = RPi ARCH = lengan PVR = ya, buat rilis -j N", hal-hal sebelumnya hanyalah sebuah sekelompok variabel shell). Sekarang, pada kenyataannya make menggunakan gcc, tetapi untuk menggunakan baris kode asalkan saya harus mendapatkan sumber make dan kemudian melihat sebagian besar mencari bagian-bagian kode yang berbeda yang akan menambah argumen yang diperlukan untuk gcc. Terima kasih sudah mencoba!
Fouric