크로스 컴파일을 위해 GCC 4.7 툴체인을 어떻게 빌드합니까?


82

이미 Stack Overflow 에서이 질문 을했지만 누구나 ARM 크로스 컴파일 (x86 / x86-64 Linux 호스트 용)을위한 GCC 4.7 툴체인을 구축했는지 알고 싶습니다. 소스에서 GCC를 빌드하기위한 많은 지침이 있으며 최신 버전이 아닌 4.7 이전의 GCC 버전에 대해 사용 가능한 많은 크로스 컴파일러가 있습니다.

Rasp Pi 자체에서 컴파일하면 제대로 작동하지만 실제로는 너무 느립니다.

컴파일을 열망하고 최신 도구를 사용하고 싶습니다.


이것은 내가해야 할 일을 따라 보입니다. 우리는 아치 리눅스를 실행하는 ARM5를 위해 개발하고 있습니다. 개발은 Ubuntu Linux 10.04 LTS에서 이루어지고 있습니다 (오늘 우리는 내일 업그레이드 할 것입니다. 아직 모르겠습니다). 현재 GCC 4.4를 실행하고 있지만 C ++ 11 언어 기능에 대해 GCC 4.8 (관리 할 수있는 경우)이 아닌 경우 GCC 4.7 (최소)이 필요하지 않은 경우 도움이 될 것입니다. ARM (5 또는 기타)에 사용할 수있는 모든 툴 체인이 구식이 아닌 것 같습니다. 소스에서 크로스 컴파일러 툴 체인을 구축하고 원하는 GCC를 지원할 수 있습니까?
mwpowellhtx 2013 년

두 번째 단계에서 약간의 문제가 있습니다. 사실, ./configure 및 make 명령을 수행했습니다. 모든 것이 잘 작동합니다. 그러나 "설치"를 끝냈을 때 다음과 같은 오류 메시지가 나타납니다. install : missing file operand

참고 항목 : raspberrypi.stackexchange.com/q/14587/5538 나는 그것을 속임수로 닫았지만 여기에 수용 된 답변이 여기에 포함되지 않은 상당한 세부 사항으로 들어가기 때문에 여기에 연결할 가치가 있다고 생각했습니다.
goldilocks

답변:


60

Raspberry Pi 용 크로스 컴파일러를 만드는 방법에 대한 지침을 찾았습니다 . crosstool-ng크로스 컴파일러 빌드 A LOT (멋진 저주 기반 인터페이스가 있음) 구성을 단순화하고 GCC 4.7을 지원 하는 도구 를 사용하는 것이 좋습니다.

나는이 단계를 따라 4.7 크로스 컴파일러의 성공적인 빌드로 끝났습니다.

전제 조건 : bison , flex , gperf , gawk , libtool , automake , g ++ 패키지가 필요 합니다. 계속 진행하기 전에 패키지 가 설치되어 있는지 확인하십시오.

  1. 여기crosstool-ng 에서 처음 다운로드 하십시오 (버전 1.15.2를 사용했습니다).
  2. 배포판을 풀고 ./configure/ make/install
  3. 파일 시스템 어딘가에 새로운 디렉토리를 작성하여 빌드 cd하십시오.
  4. 를 실행하십시오 ct-ng menuconfig. 빌드를 구성하기위한 멋진 메뉴 세트가 제공됩니다.
  5. 경로 및 기타 옵션 으로 이동하십시오 . EXPERIMENTAL로 표시된 시험 기능을 사용 하십시오.
  6. 적합한 접두사 디렉토리를 선택하십시오 . 이것은 컴파일러와 라이브러리가 설치되는 디렉토리입니다 (모든 것이 기본적으로 괜찮습니다. 디렉토리가 비어 있는지 확인하십시오).

    • 참고 : 선택한 폴더에 대한 쓰기 권한이 있어야합니다.
  7. 대상 옵션 메뉴로 이동하십시오 .

    • 대상 아키텍처 :
    • 엔디안 : 리틀 엔디안
    • 비트 : 32 비트
  8. 부동 소수점 매개 변수를 softfp 로 설정하고 싶을 수도 있지만 (자세한 내용은 이것을 참조하십시오 ) hardfpRaspbian 에 더 적합합니다.

  9. 운영 체제 메뉴로 이동하여 대상 OSLinux로 변경 하십시오 .
  10. C 컴파일러 메뉴로 가서 gcc 버전 4.7.0을 선택하십시오 (이 기사는 Linaro를 권장하지만 바닐라 gcc와 함께 작동하도록했습니다). 또한 컴파일 할 추가 언어를 선택했습니다 (C ++, Fortran 등).
  11. C- 라이브러리 메뉴로 이동하여 하나를 선택하십시오. 기본값은 eglibc 이지만 그 중 하나는 나에게 적합하지 않으므로 glibc (최신 버전)를 사용했습니다.

    • 참고 : 빌드 단계 13 동안. 소스에서 리포지토리에서 소스를 검색 할 수 없으므로 subversion이 설치되어 있지 않으면 eglibc 가 빌드되지 않을 수 있습니다.
    • 참고 : eglibc개발 부족으로 인해 더 이상 1.21.0 버전 의 일부가 아닙니다 . eglibc를 너무 오래 참조하십시오 . glibc 를 기본값으로 사용하십시오 . crosstool-ng
  12. 변경 사항을 저장하는 동안 구성 도구를 종료하십시오.
  13. ct-ng build동일한 디렉토리에서 실행하십시오 . 잠시 기다리십시오 (필자의 경우 약 45 분) 크로스 컴파일러가 준비되어야합니다.

잘 작동하는 것 같습니다!


와우, 45 분은 오랜 시간입니다. 시스템이 얼마나 빠릅니까? 지금 기다리고 있습니다.
Jivings 2016 년

글쎄, 어쩌면 조금 작았지만 모든 전제 조건을 먼저 컴파일하고 bintools와 gcc도 libc 및 libstdc ++를 컴파일해야하므로 45 분이 합리적입니다.

물론 테스트가 완료되면 경로를 올바르게 설치 하고 경로를 업데이트하는 방법에 대한 세부 정보를 추가 할 수 있습니까?
Alex Chamberlain

2
또한 RPi가 지원하기 때문에 hardfp를 사용해야한다고 생각합니다.
Alex Chamberlain

IIRC 일 수도 있지만 아치의 GCC는 softfp로 구성되어 있습니다. 나는 이것을 지금 테스트 할 시간이 없지만 답변 커뮤니티 위키를 만들었으므로 자유롭게 개선하십시오.

19

컴파일을 열망하고 최신 도구를 사용하고 싶습니다.

실제로 최신 도구를 직접 만들 필요는 없습니다. 온 라즈베리 파이 도구 GitHub의 저장소 당신은 발견 할 것이다 X86_64x686크로스 컴파일 소프트웨어 툴체인을.

x86-linux64-cross-arm-linux-hardfp툴체인을 사용하는 것이 좋습니다. 하드 부동 소수점을 컴파일하면 시스템 속도가 훨씬 빨라집니다.

$ arm-bcm2708hardfp-linux-gnueabi-gcc --version

arm-bcm2708-linux-gnueabi-gcc-4.5.1 (Broadcom-2708) 4.5.1
Copyright (C) 2010 Free Software Foundation, Inc.

참고 : 기존 커널을 ​​사용하는 경우 커널과 일치하는 툴체인을 사용해야합니다. HardFP 응용 프로그램은 SoftFP 커널에서 작동하지 않습니다.


툴체인을 사용하려면 리포지토리를 확인하십시오.

git clone https://github.com/raspberrypi/tools.git --depth 1

--depth매개 변수는 저장소 히스토리가 다운로드 될 때까지 기다릴 필요가 없음을 의미합니다 (사용하지 않기 때문에).

그런 다음 바이너리를 PATH 변수에 추가하십시오.

export PATH=~/tools/arm-bcm2708/x86-linux64-cross-arm-linux-hardfp/bin:$PATH

또는 PATH를 유지하려면

echo "export PATH=~/tools/arm-bcm2708/x86-linux64-cross-arm-linux-hardfp/bin:$PATH" >> ~/.bashrc
source ~/.bashrc

툴 체인으로 컴파일하기 위해 이제 CROSS_COMPILE매개 변수를 추가 할 수 있습니다 . 예를 들어, 다음을 실행할 때 make:

make CROSS_COMPILE=arm-bcm2708hardfp-linux-gnueabi- 

또는이를 쉽게하기 위해 변수를 bashrc다시 저장할 수 있습니다 .

echo "export TARGET=arm-bcm2708hardfp-linux-gnueabi" >> ~/.bashrc
source ~/.bashrc

이제 컴파일 할 때 변수를 사용하십시오.

make CROSS_COMPILE=${TARGET}

1
이것은 gcc-4.5.1 인 것 같습니다.

@Tibor 그게 나쁜가요?
Jivings

@Jivings 그것은 질문에 완전히 대답하지 않습니다!
Alex Chamberlain

1
다운 보트를 승인하지 않습니다. @AlexChamberlain 그것은 당신의 자신의 툴체인을 만드는 시간이 걸리는 행동에 귀중한 대체 방법을 제안합니다.
Jivings

2
@Jivings : 매우 도움이됩니다. 한편 gcc4.7.1 (내가 가진 것 중 최고)이며 부동 소수점이 즉시 작동합니다. Tibor가 게시 한 Chris의 원래 설명을 사용하여 부동 소수점 작업을 수행 할 수 없습니다. 고맙습니다.

4

64 비트 시스템에서 centos 6.3에서 ct-ng를 사용하여 도구 체인을 빌드 할 때 정적 링크가 플랫폼에서 지원되지 않았기 때문에 libstdc ++를 정적으로 링크하는 옵션을 선택 취소해야했습니다.

또한 git 저장소에서 사전 빌드 툴체인을 사용하는 것이 좋지만, 그 체인은 Centos 6.3에서 작동하지 않는 것 같습니다. 아마도 더 현대적인 시스템이나 무언가를 위해 제작 되었기 때문일 것입니다. 나는 실제로 이것을 끝내려고하지 않았다.



3

RPI 용 컴파일을위한 빠른 호스트의 이점을 원한다면 chroot 및 QEMU를 통해 교차 환경에서 작업하는 것이 좋습니다. 그건 그렇고 번거 로움없이 크로스 컴파일러를 대체합니다.

deboostrap / multistrap을 사용하여 데비안 크로스 환경을 설정하기 만하면됩니다.

(QEMU / debootstrap 접근 장 참조) 완료했습니다.



2

Ubuntu 64 비트 에디션과 Raspberry Pi SVN의 도구를 설치했는데 오류가 발생하는 경우 :

-bash: /home/I/toolchain/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-c++: 
No such file or directory

그냥 실행 :

sudo apt-get install ia32-libs

1

Carlson-Minot Inc.는 베어 메탈 및 GNU / Linux ARM 대상 모두에 대해 사전 구축 된 툴체인을 제공합니다. 이 툴체인은 OS X에서 빌드하기위한 수정 및 채택이 포함 된 Mentor Graphics Sourcery Lite 툴체인을 기반으로합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.