Làm thế nào để biên dịch chéo cho ARM?


41

Làm cách nào để thiết lập GCC để biên dịch chéo cho bộ xử lý ARM? Máy chủ lưu trữ sẽ có trên x86_64 (AMD64 - Ubuntu 12.04) và mục tiêu sẽ là ARM (Raspberry Pi cũng như Pandaboard - sẽ thực hiện các phần tổng hợp riêng cho từng phần)?

Câu trả lời:


44

Cài đặt gcc-arm-linux-gnueabibinutils-arm-linux-gnueabigói, và sau đó chỉ sử dụng arm-linux-gnueabi-gccthay vì gccbiên dịch.

Bạn cần cẩn thận với hương vị của linux và binutils trên hệ thống mục tiêu của bạn. Công cụ mới nhất là hardfloat, trong trường hợp này bạn sẽ làm:

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

Điều này mang lại trong môi trường biên dịch chéo hoàn chỉnh, bao gồm cả binutils.


Trên Ubuntu 13.10, bạn nhận được gcc-4.7 cho 'gnueabi' và gcc-4.8 cho 'gnuispihf'.
tộc

Khi tôi cố gắng biên dịch, tôi openssl/ossl_typ.hkhông tìm thấy lỗi mặc dù tôi đã cài đặt libssl-dev.
Necktwi

1
Nếu bạn nhận được mã nguồn từ apt-get source, sau khi apt-get build-depbạn thường có thể biên dịch với dpkg-buildpackage -b -uc -us -rCó cách nào để tạo một .deb dễ dàng cho ARM mà không cần thay đổi tệp thực hiện không?
Jonathan

@Maratyszcza bạn có thể vui lòng cụ thể hơn về việc thực hiện đường dây and then just use arm-linux-gnueabi-gcc instead of gcc for compilationkhông? Khi tôi biên dịch, tôi sử dụng một cuộc gọi đến make, AFAIK, tự nhiên trỏ đến /usr/lib/gcchoặc một cái gì đó gần với nó. Làm thế nào tôi có thể gọi trực tiếp arm-linux-gnueabi-gcc?
Momergil

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

1

Nhà cung cấp hình ảnh đĩa cũng phải cung cấp một trình biên dịch chéo tương thích

Đây là phương pháp đáng tin cậy duy nhất.

Đối với RPI nói riêng, trình biên dịch chéo được cung cấp có sẵn tại: https://github.com/raspberrypi/tools và có thể được sử dụng như được giải thích tại: https://raspberrypi.stackexchange.com/questions/64273/installing-raspberry- trình biên dịch chéo / 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

Nếu bạn chọn trình biên dịch chéo của bạn sai, điều sau đây có thể xảy ra:

Lựa chọn thay thế yêu thích của tôi là xây dựng hình ảnh của riêng bạn với Buildroot: https://stackoverflow.com/questions/47557262/how-to-doad-the-torvalds-linux-kernel-master-recompile-it-and-boot-it- wi / 49349237 # 49349237 Điều này xây dựng mọi thứ từ nguồn và đảm bảo rằng mọi thứ đều tương thích.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.