2012-11-02 2 views
5

지난 3 일 동안 가상 Ubuntu (12.04)를 사용하여 TechNexion 블리자드 보드 (Unstrom의 알 수없는 버전 실행) 용 Mono 2.11.4를 크로스 컴파일하려고했습니다. Win7 32 비트 머신과 CodeSourcery Sourcery G ++ ARM 툴체인, 거의 성공하지 못함. 웹의 모든 자습서를 따라 왔지만 작동하지 않습니다.ARM 용 모노 컴파일을 수행 할 수 없습니다

CodeSourcery Sourcery G ++ 툴 체인 및 Scratchbox2 (최신 git 소스에서 컴파일 됨)가 설치되어 작동합니다. Scratchbox2는

sb2-init armv7 /home/dev/CodeSourcery/Sourcery_G++_Lite/bin/arm-none-linux-gnueabi-gcc 

를 사용하여 설정하는 동안 올바른 디렉토리 (~/코드 소서리/Sourcery_G ++ _ 라이트/팔 - 없음 - 리눅스 - gnueabi/libc의)입니다.

간단한 'Hello world'(cpp)를 컴파일하고 보드에서 컴파일하고 실행할 수 있습니다. 우분투에서 :

file hello 
hello: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.16, not stripped 

나는 모노 2.11.4의 소스를 다운로드하여 instructions 중 하나를 따랐다. 첫 번째 부분 (기본 컴퓨터에서)은 오류없이 작동합니다. 그러나 두 번째 부분 (ARM 용으로 컴파일)을 실행할 때 ./configure은 예상대로 작동하지만 으로 실패합니다. "../lib/mini[some_file]은 팔 출력"과 호환되지 않습니다. A 이 파일의 파일은 실제로 인텔 80386 실행 파일이라고 말하지만 그 이유는 알 수 없습니다.

다음 단계는 을 실행하고을 삭제하고 동일한 단계를 반복하지만 동일한 결과가 나타납니다.

나는 다음 SB2 내부 전체를 대신 할 ./configure를을 시도하고 처음 일 것 같았다. 그러나 일부 오류는 빌드가 파산 팝업 :

./.libs/libmini.a(libmini_la-mini-arm.o): In function `mono_arch_init': 
/home/dev/source/host-mono/mono-2.11.4/mono/mini/mini-arm.c:689: undefined reference to `debugger_agent_single_step_from_context' 
/home/dev/source/host-mono/mono-2.11.4/mono/mini/mini-arm.c:689: undefined reference to `debugger_agent_breakpoint_from_context' 
/home/dev/CodeSourcery/Sourcery_G++_Lite/bin/arm-none-linux-gnueabi-ld: .libs/libmono-2.0.so.1.0.0: hidden symbol `debugger_agent_single_step_from_context' isn't defined 
/home/dev/CodeSourcery/Sourcery_G++_Lite/bin/arm-none-linux-gnueabi-ld: final link failed: Nonrepresentable section on output 

내가 잘못 무엇에 어떤 아이디어, 또는 내가 놓친 것 자습서에 어떤 조언?

// 앤더스

+0

mono 2.11.4 및 mono 3.0이 아닌 이유는 무엇입니까? 11은 홀수이므로 "불안정"을 의미합니다. – knocte

+0

2.10.9로 시도 할 수는 있지만 컴파일 할 생각은 없습니다. 하지만 나는 시도해 볼 것이다. 3.0은 여전히 ​​베타 버전이므로 지금은 옵션이 아닙니다. – user1143242

+0

mono 3.0이 컴파일되고 이전 버전이 아니라면 오히려 그 대신에 아무 것도 아니고 그렇지 않습니까? ;) btw 어디에서 3.0을 읽었습니까? – knocte

답변

1

그것은 새 터미널을 열고 관리 코드를 빌드 반대편에 네이티브 코드

[sbox-ARMEL: ~] > mkdir cross 
[sbox-ARMEL: ~] > cd cross 
[sbox-ARMEL: ~] > tar xzf ../mono-x.xx.tar.gz 

[sbox-ARMEL: ~] > cd arm-mono-x.xx 
[sbox-ARMEL: ~] > ./configure --disable-mcs-build 
[sbox-ARMEL: ~] > make 
[sbox-ARMEL: ~] > make install DESTDIR=`pwd`/tmptree 

을 컴파일 스크래치 박스 (Scratchbox)를 사용하는 것이 좋습니다.

$ mkdir host-mono 
$ cd host-mono 
$ tar xzf ../mono-1.xx.tar.gz 

$ cd mono-1.xx 
$ ./configure 
$ make 
$ make install DESTDIR=`pwd`/tmptree 
+2

그래서 Scratchbox2보다 Scratchbox를 사용하는 것이 더 낫습니다. 나는 심각한 검색을 할 때 주위가 다른 방향 (Sb2가 더 좋음)이라는 느낌을 받았다. – user1143242

0

당신은 당신이 때 크로스 컴파일에 대해 컴파일 된 헤더 및 라이브러리 아주 조심할 필요가있다 또는 당신은 라이브러리에 대한 바이너리 호환성으로 인한 런타임에 기괴한 직관적 충돌 자신을 찾을 수 있습니다. 이를 말하면, Linux ARM 배포판은 일반적으로 성능 저하를 겪고 이진 호환성으로 매우 안전하게 작동합니다.

개발 호스트 헤더와 라이브러리를 기반으로 구축 할 가능성이 있으므로 아키텍처가 일치하지 않을 수 있습니다.

미리 만들어진 opkg 이미지가 작동하는 것일 수도 있습니다. Angstrom은 pre-built packages을 제공합니다. Angstrom 패키지 저장소에서 네트워크 설치만큼 간단 할 수 있습니다.

소스에서 빌드해야하는 경우 문제 해결 방법 중 하나는 Angstrom 빌드 환경을 구한 다음 모노를 빌드하는 것입니다. 가장 쉬운 방법은 the Angtrom online image builder에서 미리 빌드 된 이미지 (및 개발 이미지)를 얻는 것입니다. 행운을 빌어 당신의 보드에 존재합니다.

+0

불행히도 보드는 수선화 페이지에 표시되지 않지만 더 깊이 파고 "compatibles"가 있는지 확인해야합니다. – user1143242

+0

Beagleboard를 테스트 할 때 빌더를 많이 사용했지만 Mono를 포함 할 때 빌드를 완료하지 못했습니다. 이유는 모르겠지만 그냥 작동하지 않습니다 ... 작업중인 Scratchbox2로 보이는 내용을 컴파일 할 때 안전하다고 생각했습니다. 내가 말했듯이, 나는 간단한 프로그램 (심지어 Sqlite3)을 컴파일 할 수 있지만 Mono는 실패한다. – user1143242

+0

이미 미리 빌드 된 Mono (** opkg **를 사용하여 설치)를 사용하고 있지만 불행하게도 버전 2.6.3입니다. .NET 4.0 코드를 실행하려면 2.10.x가 필요합니다. 2.10.8은 사전 빌드 된 것처럼 존재하지만 Angstrom의 새로운 버전에만 사용하기 때문에 Angstrom을 업그레이드하는 데 집중해야합니다. – user1143242

관련 문제