2012-06-26 10 views
11

RaspBerry Pi를 사용하고 내 컴퓨터에서 C++로 작성된 간단한 helloWorld를 크로스 컴파일하려고합니다. 나는 리눅스 용 코드 소서리 툴체인을 사용하여 컴파일하고있다. TFTP로 딸기와 그것을 chmod를 사용하여 실행 권한을 부여하기 위해 인 helloWorld 바이너리를 복사 할 때RaspBerry 파이를위한 크로스 컴파일

, 다음 오류가 나타납니다 바이너리를 통해 '파일을'한 경우

"잘못된 명령"

내가 얻을 : "라즈베리 : ELF 32 비트 LSB 실행 파일, ARM, 버전 1 (SYSV), 정적으로 연결됨, 스트립 됨"

연결시 "-static -static-libstdC++"를 사용했기 때문입니다. 내가 정적 링크를 사용하지 않는 경우

오류는 다음과 같습니다 "분할 오류"

강령 :

/* 
* main.cpp 
* 
* Created on: 26/06/2012 
*  Author: ccortiz 
*/ 

#include <iostream> 
using namespace std; 

int main(void){ 

    cout << "Hello Cross Compilling for ARM!" << endl << flush; 
    return 0; 
} 

어떻게 컴파일하고 올바른 방법으로 내 프로그램을 실행할 수 있을까? 감사합니다. .

+0

게시하시기 바랍니다 안녕하세요 소스 및 바이너리 경우 디스 어셈블리를 구축 한 후 라즈베리에 바이너리를 생성 보냅니다. –

+0

RaspberryPi의 이점 중 하나는 전체 OS를 실행한다는 점입니다. 크로스 컴파일 할 필요가 없습니다. –

+1

예,하지만 라즈베리에서 컴파일하는 것은 Core i5에서 컴파일하는 것보다 느립니다. 그러나 또한 나는 사랑하는 이클립스로 프로그램하고 싶다. –

답변

16

This page은 Raspberry Pi에 대한 크로스 컴파일 환경을 설정하는 방법을 자세히 알려줍니다. 행운을 빕니다!

+0

감사합니다. crosstools-ng가 올바르게 작동합니다. –

+0

@CesarOrtiz이 방법이 효과가 있다면이 대답을 받아 들여야합니다. – TheLukeMcCarthy

6

이유는 무엇입니까 Segmentation fault은 ABI와 다릅니다. Raspbian을 실행할 때 Raspbian을 사용하는 경우 하드웨어에서 hardfp 및 VFP 지원을 가정하는 linux-arm-gnueabihf ABI (ARMv6 환경에서는 드뭅니다)를 사용하므로 GCC 및 EGLIBC에 대한 추가 패치가 필요합니다 (이러한 패치는 Raspbian 저장소에서 찾을 수 있습니다).

코드 Sourcery의 교차 도구 체인에는 이러한 패치가 없을 가능성이 높기 때문에 런타임에 다른 ABI (linux-arm-gnueabi)를 사용하므로 충돌이 발생합니다 (커널 ABI는 hardfp/softfp에 의존하지 않으므로 정적 연결이 작동 함).

Illegal Instruction 오류가 발생하는 또 다른 이유는 ARMv7 용 Code Sourcery 교차 툴 체인이며 ARMv6은 Raspberry Pi입니다. 그러나이 경우 정적 링크와 동적 링크 모두 동일한 오류를 발생시킵니다.

Here is a step-by-step guide how to build Raspberry Pi cross compiler in Windows 두 hardfp/softfp ABI 버전. 결과 크로스 컴파일러는 C++을 지원하며 cygwin 런타임 라이브러리 (cygwin1.dll)에 의존하지 않습니다.

0

문제점은 FTP 전송에서 이진 모드 대신 ASCII 모드를 사용하는 것이 었습니다. 오늘은 SFTP (SSH)를 사용하는 것을 선호합니다. 감사합니다. .

1

당신의 툴체인을 시도 할 수 : https://github.com/kallaballa/Raspberry-GCC-4.7.3

이 hardfp가 gnueabi를 사용하여와의 ARMv6에 대한 사전 구축 된 GCC-4.7.3 툴체인입니다. 나는 라스베 베 리안 목표물을 위해 C++ 11을 컴파일하기 위해 이것을 사용하고있다.

Linux x86_64 호스트에서만 작동합니다.

0

Visual Studio 및 Visual GDB 플러그인을 사용하면 라즈베리 파이에 대한 크로스 컴파일러를 다운로드 할 수 있습니다.그런 다음 ssh 연결을 만들 수 있고 또한 프로그램을 라즈베리 파이에 원격으로 배포 할 수 있습니다. 내가 biicode을 시도 권하고 싶습니다

3

, 그것은 자동으로 크로스 컴파일러 환경을 설정하고

+0

링크가 다운되었습니다. – Hannes

+0

고침 주셔서 감사합니다. – hithwen