2017-11-27 11 views
0

라즈베리 파이 3에 모노를 만들기 위해 필사적으로 노력합니다.먼저 레포에서 모노를 설치했습니다. 그런 다음 최신 tarball 또는 git master를 빌드하려고했습니다. 어느 쪽도 효과가 없었다.라즈베리 파이 3에 모노를 빌드하십시오.

난 항상이 메시지와 끝까지 :

make install-local 
make[7]: Entering directory '/home/pi/mono-5.9.0.415/mcs/class/corlib' 
CSC  [basic] mscorlib.dll 
/home/pi/mono-5.9.0.415/mcs/class/referencesource/mscorlib/system/threading/Tasks/Task.cs(5918,45): error CS0246: The type or namespace name 'Task<>' could not be found (are you missing a using directive or an assembly reference?) 
/home/pi/mono-5.9.0.415/external/corefx/src/System.Memory/src/System/ReadOnlySpan.cs(85,42): warning CS3001: Argument type 'void*' is not CLS-compliant 
/home/pi/mono-5.9.0.415/external/corefx/src/System.Memory/src/System/Span.cs(90,34): warning CS3001: Argument type 'void*' is not CLS-compliant 
../../build/library.make:329: recipe for target '../../class/lib/basic/mscorlib.dll' failed 
make[7]: *** [../../class/lib/basic/mscorlib.dll] Error 1 
make[7]: Leaving directory '/home/pi/mono-5.9.0.415/mcs/class/corlib' 
../../build/rules.make:211: recipe for target 'do-install' failed 
make[6]: *** [do-install] Error 2 
make[6]: Leaving directory '/home/pi/mono-5.9.0.415/mcs/class/corlib' 
../build/rules.make:232: recipe for target 'install-recursive' failed 
make[5]: *** [install-recursive] Error 1 
make[5]: Leaving directory '/home/pi/mono-5.9.0.415/mcs/class' 
build/rules.make:232: recipe for target 'install-recursive' failed 
make[4]: *** [install-recursive] Error 1 
make[4]: Leaving directory '/home/pi/mono-5.9.0.415/mcs' 
Makefile:54: recipe for target 'profile-do--basic--install' failed 
make[3]: *** [profile-do--basic--install] Error 2 
make[3]: Leaving directory '/home/pi/mono-5.9.0.415/mcs' 
Makefile:50: recipe for target 'profiles-do--install' failed 
make[2]: *** [profiles-do--install] Error 2 
make[2]: Leaving directory '/home/pi/mono-5.9.0.415/mcs' 
Makefile:600: recipe for target 'install-exec' failed 
make[1]: *** [install-exec] Error 2 
make[1]: Leaving directory '/home/pi/mono-5.9.0.415/runtime' 
Makefile:541: recipe for target 'install-recursive' failed 
make: *** [install-recursive] Error 1 

이것은 내가 타르볼 빌드에 사용되는 스크립트 :

PREFIX=/home/pi/.myMono 
VERSION=5.9.0.415 
tar xvf mono-$VERSION.tar.bz2 
cd mono-$VERSION 
./configure --prefix=$PREFIX 
make 
make install 

사람이 같은 문제가 있습니까? 또는 올바르게 제안하려면 어떻게해야합니까?

+0

지난 밤에 내 RasPi3에서 동일한 모노 패키지를 컴파일하고있었습니다. 흥미로운 점은 Task.cs에서 오류가 발생하지 않지만 ReadOnlySpan.cs 및 Span.cs에 대해 두 가지 경고가 표시된다는 것입니다. 나는 몇 가지 것을 시도하고 어떻게 진행되는지 알려줄 것입니다. 내가 archlinux의 깨끗한 설치로 시작, 모든 컴파일러와 도구를 추가했지만 repo에서 모노를 설치하지 않았다. 이론 상으로는 시스템의 빌드가 repo의 CSC를 사용 중일 수 있습니다. 레포에서 모노 패키지를 제거하려고 했습니까? 파이에서 어떤 리눅스 배포판을 사용하고 있습니까? – omahena

+0

mono 5.2.0.224와 5.9.0.398의 편집은 같은 장소에서 중단됩니다. 여기에 CSC의 예외 스택이 표시되고 CompileMethodBodies가 null 예외에 대해 화가 난 것처럼 보입니다. 5.9.0.415는 가장 깨끗한 출력을 제공하지만 문제에 대한 힌트는 제공하지 않습니다. mono 5의 큰 변화가 Roslyn이라는 것을 고려해 볼 때, Roslyn은 32 비트 ARM 플랫폼에서 황금 시간대를 맞이할 준비가되지 않았다고 생각합니다. x86_64 가상 머신에서 잘 컴파일되었습니다. 실험으로 나는 RasPi 3에서 Mono 4.8.1을 컴파일 중입니다. 그리고 지금까지는 좋게 보입니다. – omahena

답변

2

일반적으로 라즈베리 파이 3 또는 모노에서 실행되는 모노 버전 5.9.0.415를 가져 오는 것이 특히 명확하지 않으므로이 질문은 일반적으로 모노에 관한 것으로 가정합니다.

제 경험상 모노 5 및 armv7l 플랫폼 (armv7l-unknown-linux-gnueabihf)과의 호환성 문제가있는 것으로 보입니다.

나는 다음과 같은 모노 릴리스 패키지를 구축하는 것을 시도했다 :

  • 5.0.0.100
  • 5.0.1.1
  • 5.2.0.104
  • 5.2.0.224
  • 5.9.0.398
  • 5.9.0.415

빌드 프로세스에서 생성 된 csc 바이너리를 사용해야하는 시점에서 컴파일이 실패합니다. CompileMethodBodies 호출에서 컴파일 섹션의 NullPointerException이있는 것으로 보입니다.

문제는 처음에는 Roslyn의 도입으로 Mono 5에 나타납니다. 또한

wget https://download.mono-project.com/sources/mono/mono-4.8.1.0.tar.bz2 
tar xvf mono-4.8.1.0.tar.bz2 
cd mono-4.8.1.0 
./configure --prefix=/home/pi/.myMono 
make 
make install 

: 좋은 소식은 모노 릴리스 4.8.1은 새로운 로슬린 코드에 의해 영향을받지 않습니다 그리고 당신은이 같은 모노를 컴파일 할 수 있습니다 라즈베리 파이에 3

을 중요한 문제를 컴파일없이 실행하는 것입니다 Raspberry Pi 3에서 모노 컴파일하는 동안 모든 4 개의 CPU 코어를 활용하고자한다면 다음과 같이 make를 시작하면됩니다 : make -j4. 이렇게하면 컴파일 시간이 크게 줄어 듭니다.

그리고 libmono의 생성을 건너 뛰려면 --disable-libraries 매개 변수를 사용하여 빌드를 구성하면됩니다 (./configure --disable-libraries --prefix=/home/pi/.myMono). 그러나 모든 응용 프로그램을 실행하기 위해 라이브러리가 필요하기 때문에 ... 모노 런타임을 한 번만 다시 설치하면 모노 런타임을 연속적으로 다시 빌드 할 때만 도움이됩니다.

내가 알아 차 렸지만 확인할 수 없었던 것은 결국 라스베리 파이 3에 대한 모노 5 패키지가있을 수 있다는 것입니다. 이 post은 다운로드 할 수있는 5.2 패키지가 있다고 주장합니다. 마찬가지로 모노 download page.

사이드 노트에서 /home/pi/.myMono에 모노를 설치하는 것이 나쁜 선택 일 수 있음을 말씀드립니다. 하지만 여전히 작동해야한다고 생각합니다 ...보다 고전적인 방법은/usr/local 또는/opt 폴더입니다. 다음은이 alternate locations에 대한 의견입니다.

+0

문제는 내가 라즈베리 파이 3에서 최신 모노 마스터가 필요하다는 것입니다. 이 버그 수정 때문에 최신 버전이 필요합니다 : https://github.com/mono/mono/pull/5842 그리고 라즈베리가 하드웨어입니다 이 프로젝트에 사용할 수 있습니다. 위치 정보를 제공해 주셔서 감사합니다. 나는 그것을 바꿀 것이다. 편집 : 추신 : 내 PI에 Raspian을 사용합니다. – Richy1989

+0

문제가 발생했습니다. 아마도 최신 모노 런타임을 다른 플랫폼에서 컴파일하는 최신 버전의 monolib과 함께 사용하는 것이 가능할 것입니다. WCF는 monolib의 일부일뿐입니다. 그들은 이론적으로 호환되어야합니다 ... 우리 프로젝트 중 하나에서 사용해야하는 또 다른 대안은 비동기 소켓이 깨 졌기 때문에 모노 용 통신 코드의 특수 버전을 작성하는 것이 었습니다. 귀하의 경우에는 WCF를 대체하는 것이 훨씬 더 어려울 수 있습니다. 병합 된 런타임 및 monolib로 재생 해보겠습니다. – omahena