จะทำการคอมไพล์โปรแกรมสำหรับ Raspberry Pi ด้วย gcc ได้อย่างไร?


8

ฉันชอบที่จะใช้ gcc เพื่อรวบรวมโปรแกรม C และ C ++ ขนาดเล็กบนคอมพิวเตอร์เครื่องหลักของฉัน อย่างไรก็ตามฉันยังมี Raspberry Pi และเป็นคอมพิวเตอร์แบบ Single-Core 700 MHz ฉันต้องการที่จะไม่ต้องทำงานพัฒนาของฉันมันทุกครั้งที่ฉันต้องการสร้างไบนารีสำหรับมัน ฉันจะรวบรวมโปรแกรมของฉันสำหรับ Raspberry Pi โดยใช้แล็ปท็อป x86 ของฉันได้อย่างไร (สำหรับฉันรู้ว่ามีวิธี) และมีวิธีที่ฉันอาจรวบรวมโปรแกรม C (++) บน Pi แต่สร้างไบนารี x86 หรือไม่? หากเป็นความช่วยเหลือใด ๆ "The SoC เป็น Broadcom BCM2835 สิ่งนี้มี ARM1176JZFS พร้อมจุดลอยตัว ... " (อ้างอิงจากราสเบอร์รี่ Pi คำถามที่พบบ่อยอย่างเป็นทางการ)


นอกจากนี้ยังมี Raspberry PI SE ต่อไปนี้เป็นคำถามที่ทำให้คุณได้รับการติดตามอย่างถูกต้อง: raspberrypi.stackexchange.com/questions/192/…
Lekensteyn

คำตอบที่ดีที่นี่: Cross-Compile สำหรับ ARM?
สูงศักดิ์

คำตอบ:


4

จากการใช้การรวมตัวกันในที่aptเก็บข้อมูลและระบบลินุกซ์ในตัวอาคารที่ยอดเยี่ยมอย่างยิ่ง(ฉบับที่ 2, 2008, O'Reilly) ฉันพบสิ่งนี้:

แขนลินุกซ์ gnueabi-GCC

นั่นคือทั้งชื่อของคำสั่งและแพ็คเกจที่คุณติดตั้งเพื่อรับมา เมื่อเรียกใช้แล้วจะทำหน้าที่เหมือน "วานิลลา" gccโดยมีข้อยกเว้นเพียงอย่างเดียวว่าสร้างแพ็คเกจสำหรับสถาปัตยกรรม ARM (หรือชุดย่อยรวมถึง BCM2835 อย่างน้อย) การสร้างระบบ Linux ในตัว (หน้า 93-94) อธิบายว่าชื่อที่ใช้สำหรับเรียกใช้เครื่องมือ GNU ในรูปแบบการคอมไพล์ข้ามตามรูปแบบนี้:

CPU-เคอร์เนล manufactuer-os

-gccในตอนท้ายของตัวอย่างสูงสุดเป็นส่วนประกอบที่ใช้สำหรับการ specifing ซึ่งเป็นส่วนหนึ่งของbinutilsคุณต้องการการใช้งาน มันสามารถสลับออกสำหรับส่วนประกอบ GNU toolchain อื่นเช่นld(linker) หรือas(แอสเซมเบลอร์) สำหรับarm-linux-gnueabi-gcc, armเป็นสถาปัตยกรรมlinuxเป็นเคอร์เนลgnueabiเป็นระบบปฏิบัติการและgccเป็นส่วนประกอบ ผู้ผลิตอยู่ที่ไหน เห็นได้ชัดว่าผู้ผลิตสามารถระบุว่า "ไม่ทราบ" เพราะไม่ค่อยสร้างความแตกต่างหรือแยกออกจากกันโดยสิ้นเชิง (รวมถึงจะทำให้arm-linux-unknown-gnueabi-gcc)


1

วิธีการบันทึกอย่างเป็นทางการ

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

ทดสอบใน Ubuntu 17.10 เครื่องมือซื้อคืนที่ 5caa7046982f0539cf5380f94da04b31129ed521


0

ฉันไม่แน่ใจที่ 100% แต่ใช้https://tandrepires.wordpress.com/2012/08/01/raspberry-pi-openelec-pvr-dvb-t/คุณสามารถลอง: 1) ห้องสมุดที่จำเป็น:

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) รวบรวมโครงการด้วยตัวเลือกต่อไปนี้โดยที่ N คือจำนวนแกนประมวลผลของ x86 CPU ของคุณ:

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

ฉันหวังว่ามันจะช่วย `


ฉันซาบซึ้งในความพยายามฉันทำจริงๆ แต่น่าเสียดายที่การกวดวิชานี้ (และบรรทัดที่สอดคล้องกันของรหัส) มีการใช้makeในการรวบรวมโครงการที่ถูกสร้างขึ้นเพื่อใช้ประโยชน์ (เป็น "โครงการ = RPI ARCH = แขน PVR = yes ให้ปล่อย -j N" สิ่งที่ก่อนที่จะเป็นเพียง พวงตัวแปรเชลล์) ตอนนี้ในความเป็นจริงmake ใช้ gcc แต่เพื่อใช้บรรทัดของรหัสที่ให้ฉันจะต้องได้รับแหล่งที่มาของการทำแล้วมองผ่านส่วนใหญ่ของมันค้นหาส่วนต่าง ๆ ของรหัสที่จะเพิ่มในอาร์กิวเมนต์ที่จำเป็นเพื่อ gcc ขอบคุณที่ลอง!
fouric
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.