gcc를 사용하여 Raspberry Pi 용 프로그램을 크로스 컴파일하는 방법은 무엇입니까?


8

나는 주 컴퓨터에서 작은 C 및 C ++ 프로그램을 컴파일하기 위해 gcc를 사용하는 것을 좋아한다. 그러나 Raspberry Pi도 있으며 700MHz 단일 코어 컴퓨터이기 때문에 바이너리를 만들 때마다 개발 작업을 수행하지 않아도됩니다. x86 랩톱을 사용하여 Raspberry Pi 용 프로그램을 어떻게 크로스 컴파일합니까? 그리고 Pi에서 C (++) 프로그램을 컴파일 할 수 있지만 x86 바이너리를 생성하는 방법이 있습니까? 도움이되는 경우 "SoC는 Broadcom BCM2835입니다. 여기에는 부동 소수점이있는 ARM1176JZFS가 포함되어 있습니다 ..."(공식 Raspberry Pi FAQ에 따라 ).


Raspberry PI SE도 있습니다. 여기에 올바른 길을 찾을 수있는 질문이 있습니다. raspberrypi.stackexchange.com/questions/192/…
Lekensteyn

좋은 대답은 다음과 같습니다. ARM의 크로스 컴파일?
nobar

답변:


4

apt리포지토리와 매우 뛰어난 Building Embedded Linux 시스템 (2008 년 2 판, O'Reilly) 에서 파킹을 조합하여 다음을 발견했습니다.

arm-linux-gnueabi-gcc

그것은 명령의 이름과 명령을 얻기 위해 설치하는 패키지입니다. 일단 호출되면 gccARM 아키텍처 용 패키지 (또는 BCM2835를 포함하는 서브 세트)를 빌드한다는 점을 제외 하고는 정확히 "vanilla"로 작동합니다 . 임베디드 Linux 시스템 빌드 (93-94 페이지)에서는 크로스 컴파일 방식으로 GNU 도구를 호출하는 데 사용되는 이름이 다음 형식을 따릅니다.

CPU- 커널-제조업체 -OS

-gcc맨 위의 예제의 끝은이다 구성 요소 의 일부도 명시 사용, binutils사용하려는. ld(링커) 또는 as(어셈블러) 와 같은 다른 GNU 툴체인 구성 요소로 교체 할 수 있습니다 . 를 들어 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

우분투 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

도움이 되길 바랍니다. `


노력해 주셔서 감사합니다. 불행하게도,이 학습서 (및 해당 코드 행)는 makemake ( "PROJECT = RPi ARCH = arm PVR = yes make release -j N") 를 사용하도록 설정된 프로젝트를 컴파일하는 데 사용됩니다 . 쉘 변수의 무리). 이제, 현실에서 make 사용하는 GCC를,하지만 난 메이크업의 소스를 얻을 후 대부분의 GCC에 필요한 인수에 추가 할 코드의 다른 부분에 대한 검색을 통해보고해야 제공된 코드의 줄을 사용 할 수 있습니다. 그래도 감사합니다!
fouric
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.