ฉันจะรวบรวมแอปพลิเคชันของฉันสำหรับสถาปัตยกรรม armhf ของ Ubuntu 12.04 บนโฮสต์ Ubuntu 12.04 i386 ได้อย่างไร


16

ฉันมีใบสมัครขนาดใหญ่ที่ฉันเขียน ฉันสามารถรวบรวมแอปพลิเคชั่นได้สำเร็จในสถานการณ์ต่อไปนี้:

  • ในการรวบรวมเนทีฟสำหรับโฮสต์ i386 ที่ใช้งาน Ubuntu 12.04
  • กำเนิดบน PandaBoard ที่ใช้งาน Ubuntu 12.04 (ใช้เวลานาน)
  • ใช้ Qemu และ chroot บนโฮสต์พีซีสำหรับเป้าหมายแขน PandaBoard (ใช้เวลานานมาก)

ฉันต้องการรวบรวมแอปพลิเคชันบนโฮสต์ i386 เพื่อทำงานบนเป้าหมายเช่น PandaBoard เพื่อสร้างงานให้เสร็จตามกำหนดเวลา จนถึงตอนนี้ความพยายามในการใช้โซ่เครื่องมือ arm-linux-gnueabihf ในที่เก็บได้สร้างไบนารีที่ทำงานไม่ถูกต้อง ในขั้นตอนนี้ฉันยังไม่มีแผนในการจัดทำซอฟต์แวร์

อะไรคือวิธีที่แนะนำในการประสบความสำเร็จในการคอมไพล์ข้าม?


การคอมไพล์ข้ามด้วย toolchain ของคอมไพเลอร์ข้ามควรทำงานได้นั่นคือสิ่งที่มันมีไว้สำหรับ ไบนารีไม่ทำงานอย่างถูกต้องหรือไม่
Gilles 'ดังนั้น - หยุดความชั่วร้าย'

ไบนารีของฉันสิ้นสุดลงเกือบจะในทันที ดูเหมือนว่า strace จะระบุว่า libc.so.6 ไม่ใช่ตำแหน่งที่คาดว่าจะเป็น
Jonathan Cave

ที่ควรจะแก้ไขได้โดยตัวเลือกลิงค์ (ฉันไม่ทราบว่าคนใดคนหนึ่งทันที) ระบบเป้าหมายใช้งาน Ubuntu หรือไม่
Gilles 'หยุดความชั่วร้าย'

ใช่เป้าหมายกำลังใช้งาน Ubuntu 12.04 เช่นกัน ฉันคิดว่าบางทีฉันอาจต้องใช้ตัวเลือก --sysroot เพื่อคอมไพเลอร์และตัวเชื่อมโยง แต่สิ่งนี้ถูกปิดใช้งานใน toolchain ของ Ubuntu
Jonathan Cave

Toolchain ใช้งานได้ดีสำหรับฉันในวันที่ 12.04 ฉันเพิ่งทดสอบมันใน amd64 และประสบความสำเร็จในการรันไบนารีที่สร้างบนเซิร์ฟเวอร์ armhf แต่ฉันไม่มี i386 build machine ที่มีประโยชน์ หากคุณยังมีปัญหาอยู่คุณจะต้องทำอย่างละเอียด ldd พูดอะไร คุณเห็นอะไรจากสเตรจที่นำคุณไปสู่ข้อสรุป ดูว่าคุณสามารถลดปัญหาของคุณเป็นกรณีทดสอบง่ายๆที่ควรทำงานได้อย่างชัดเจนและนำเสนอขั้นตอนที่คุณกำลังทำอย่างละเอียด
Robie Basak

คำตอบ:


6

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

https://wiki.ubuntu.com/MultiarchCross

Ubuntu มี cross-toolchain apt-get install gcc-arm-linux-gnueabihfแต่ทำงานใน toolchain รุ่นถัดไปที่กล่าวถึงที่นี่: http://gsoc.sitedethib.com/posts/apt-get_install_gcc-4.7-arm-linux-gnueabihf/

มีวิธีแก้ไขปัญหาหลายประการที่จำเป็นในตอนนี้ ตัวอย่างเช่นหากคุณใช้การเชื่อมโยงทางอ้อม (ครอบคลุมในหน้า linaro wiki) คุณควรหลีกเลี่ยงการเรียกใช้ไบนารีต่างประเทศทันทีหลังจากรวบรวม

นอกจากนี้มันยังโตเต็มที่ที่สุดด้วย autotools

ฉันได้รับแพคเกจของฉันเพื่อรวบรวมคอมไพล์อย่างรวดเร็ว

apt-get build-dep -aarmhf foo-pkg
apt-get source foo-pkg
cd foo-pkg-*
dpkg-buildpackage -aarmhf

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