Làm cách nào để biên dịch chéo các chương trình cho Raspberry Pi với gcc?


8

Tôi thích sử dụng gcc để biên dịch các chương trình C và C ++ nhỏ trên máy tính chính của mình. Tuy nhiên, tôi cũng có Raspberry Pi và, là một máy tính lõi đơn 700 MHz, tôi không muốn phải thực hiện công việc phát triển của mình trên nó mỗi khi tôi muốn tạo nhị phân cho nó. Làm thế nào (vì tôi biết rằng có một cách) để tôi biên dịch chéo chương trình của mình cho Raspberry Pi bằng máy tính xách tay x86 của mình? Và có cách nào để tôi có thể biên dịch các chương trình C (++) trên Pi nhưng tạo ra nhị phân x86 không? Nếu có bất kỳ sự trợ giúp nào, "SoC là Broadcom BCM2835. Cái này chứa ARM1176JZFS, với điểm nổi ..." (theo Câu hỏi thường gặp của Raspberry Pi ).


Ngoài ra còn có Raspberry PI SE, đây là một câu hỏi có thể giúp bạn đi đúng hướng: raspberrypi.stackexchange.com/questions/192/
Lỗi

Câu trả lời hay ở đây: Biên dịch chéo cho ARM?
tộc

Câu trả lời:


4

Sử dụng kết hợp chọc vào các aptkho lưu trữ và Hệ thống Linux nhúng Xây dựng cực kỳ xuất sắc (ấn bản 2, 2008, O'Reilly), tôi thấy điều này:

cánh tay-linux-gnueabi-gcc

Đó là cả tên của lệnh và gói mà bạn cài đặt để có được nó. Sau khi được gọi, nó hoạt động chính xác như "vanilla" gcc, ngoại trừ duy nhất là nó xây dựng các gói cho kiến ​​trúc ARM (hoặc một tập hợp con bao gồm BCM2835, ít nhất). Xây dựng các hệ thống Linux nhúng (trg 93-94) giải thích rằng các tên được sử dụng để gọi các công cụ GNU theo cách biên dịch chéo tuân theo định dạng này:

cpu-kernel-nhà sản xuất-os

Phần -gcccuối của ví dụ trên cùng là thành phần , được sử dụng để chỉ định phần binutilsnào bạn muốn sử dụng. Nó có thể được hoán đổi cho một thành phần chuỗi công cụ GNU khác, chẳng hạn như ld(trình liên kết) hoặc as(trình biên dịch). Vì arm-linux-gnueabi-gcc, armlà kiến ​​trúc, linuxlà hạt nhân, gnueabilà os và gcclà thành phần. Nhà sản xuất ở đâu? Rõ ràng, nhà sản xuất có thể được chỉ định là "không xác định", vì nó hiếm khi tạo ra sự khác biệt hoặc bỏ qua tất cả (bao gồm cả nó sẽ làm arm-linux-unknown-gnueabi-gcc).


1

Phương pháp tài liệu chính thức

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

Đã thử nghiệm trong Ubuntu 17.10, các công cụ repo tại 5caa7046982f0539cf5380f94da04b31129ed521


0

Tôi không chắc chắn 100%, nhưng, bằng cách sử dụng https://tandrepires.wordpress.com/2012/08/01/raspberry-pi-openelec-pvr-dvb-t/ , bạn có thể thử: 1) Thư viện bắt buộc:

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) Biên dịch dự án với các tùy chọn sau, trong đó N là số lõi của CPU x86 của bạn:

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

Tôi hy vọng nó sẽ giúp. `


Tôi đánh giá cao những nỗ lực, tôi thực sự làm. Thật không may, hướng dẫn này (và dòng mã tương ứng) được sử dụng makeđể biên dịch một dự án đã được thiết lập để sử dụng make ("PRO DỰ ÁN = RPi ARCH = arm PVR = yes make release -j N", những thứ trước đây chỉ là một bó biến số vỏ). Bây giờ, trong thực tế make sử dụng gcc, nhưng để sử dụng dòng mã được cung cấp, tôi sẽ phải lấy nguồn tạo và sau đó xem qua hầu hết các mã tìm kiếm các phần khác nhau của mã sẽ thêm vào các đối số cần thiết cho gcc. Cảm ơn bạn đã cố gắng, mặc dù!
bốn giờ
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.