วิธีการคอมไพล์ข้ามสำหรับ ARM?


41

ฉันจะตั้งค่า GCC สำหรับการรวบรวมข้ามสำหรับหน่วยประมวลผล ARM ได้อย่างไร โฮสต์จะอยู่ที่ x86_64 (AMD64 - Ubuntu 12.04) และเป้าหมายจะเป็น ARM (Raspberry Pi และ Pandaboard - จะรวบรวมแยกกันหรือไม่)

คำตอบ:


44

ติดตั้งgcc-arm-linux-gnueabiและbinutils-arm-linux-gnueabiแพ็คเกจจากนั้นใช้arm-linux-gnueabi-gccแทนgccการรวบรวม

คุณต้องระวังเกี่ยวกับรสชาติของ linux และ binutils ที่คุณมีในระบบเป้าหมายของคุณ สิ่งใหม่ล่าสุดคือ hardfloat ในกรณีนี้คุณจะทำ:

sudo apt-get install gcc-arm-linux-gnueabihf

สิ่งนี้นำมาซึ่งสภาพแวดล้อมการคอมไพล์ข้ามรวมทั้ง binutils


บน Ubuntu 13.10 คุณจะได้รับ gcc-4.7 สำหรับ 'gnueabi' และ gcc-4.8 สำหรับ 'gnueabihf'
สูงศักดิ์

เมื่อฉันพยายามที่จะรวบรวมผมopenssl/ossl_typ.hไม่พบข้อผิดพลาด libssl-devแต่ผมติดตั้งแล้ว
Necktwi

1
หากคุณได้รับซอร์สโค้ดapt-get sourceหลังจากapt-get build-depปกติคุณสามารถคอมไพล์ด้วยdpkg-buildpackage -b -uc -us -rมีวิธีสร้าง. deb นี้อย่างง่ายดายสำหรับ ARM โดยไม่ต้องเปลี่ยน makefile หรือไม่?
โจนาธาน

@Maratyszcza คุณช่วยกรุณาเจาะจงมากขึ้นเกี่ยวกับการดำเนินการของบรรทัดได้and then just use arm-linux-gnueabi-gcc instead of gcc for compilationหรือไม่ เมื่อฉันรวบรวมฉันใช้การโทรmakeAFAIK ชี้ไปที่/usr/lib/gccหรือใกล้เคียงกับสิ่งนั้น ฉันจะเรียก arm-linux-gnueabi-gcc โดยตรงได้อย่างไร?
Momergil

9
@MomergilCC=arm-linux-gnueabihf-gcc make ...
Maratyszcza

1

ผู้ให้บริการอิมเมจดิสก์ต้องจัดเตรียม cross compiler ที่เข้ากันได้

นี่เป็นวิธีการเดียวที่เชื่อถือได้

สำหรับ RPI โดยเฉพาะคอมไพเลอร์ cross ที่ให้มามีอยู่ที่: https://github.com/raspberrypi/toolsและสามารถใช้งานได้ตามที่อธิบายไว้ที่: https://raspberrypi.stackexchange.com/questions/64273/installing-raspberry- ปี่ข้ามคอมไพเลอร์ / 83215 # 83215

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

หากคุณเลือกไขว้คอมไพเลอร์ของคุณอย่างไม่ถูกต้องอาจเกิดสิ่งต่อไปนี้:

ทางเลือกที่ฉันชอบคือการสร้างภาพของคุณเองด้วย Buildroot: https://stackoverflow.com/questions/47557262/how-to-download-the-torvalds-linux-kernel-master-recompile-it-and-boot-it- และ wi / 49349237 # 49349237สิ่งนี้สร้างทุกอย่างจากแหล่งที่มาและทำให้แน่ใจว่าทุกอย่างเข้ากันได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.