在Centos 6.6上编译单声道3.10.0失败

时间:2015-01-09 17:27:48

标签: mono centos

我试图将单声道版本3.10.0编译到干净的Centos服务器上。我不想尝试大师,看起来每次看到它都会失败。

所以我试着像这样编译单声道:

wget https://github.com/mono/mono/archive/mono-3.10.0.tar.gz
tar xvfz mono-3.10.0.tar.gz
cd mono-mono-3.10.0/
./autogen.sh
make get-monolite-latest

这是因为我收到有关丢失的monolite tarball的错误(此处有更多信息:https://bugzilla.xamarin.com/show_bug.cgi?id=16687

所以我找到了一个工作网址(根据之前的链接,它应该与单声道3.10.0配合使用),所以我继续这样做:

make get-monolite-latest monolite_url=http://storage.bos.xamarin.com/mono-dist-master/1b/1b41fd76350367453c8100f8bd0e7242105c6d39/monolite-111-latest.tar.gz
make EXTERNAL_MCS=${PWD}/mcs/class/lib/monolite/basic.exe

无论如何,这导致了错误:

/usr/local/src/mono-mono-3.10.0/mcs/class/lib/monolite/basic.exe: /usr/local/src/mono-mono-3.10.0/mcs/class/lib/monolite/basic.exe: cannot execute binary file
make[6]: *** [build/deps/basic-profile-check.exe] Error 126
*** The compiler '/usr/local/src/mono-mono-3.10.0/mcs/class/lib/monolite/basic.exe' doesn't appear to be usable.
*** Trying the 'monolite' directory.
Bootstrap compiler: Mono C# compiler version 3.6.1.0
./../jay/jay: 7 shift/reduce conflicts.
mkdir -p -- ../class/lib/basic/
make[7]: *** No rule to make target `../../external/ikvm/reflect/*.cs', needed by `../class/lib/basic/basic.exe'.  Stop.
make[6]: *** [do-all] Error 2
make[5]: *** [all-recursive] Error 1
make[4]: *** [profile-do--basic--all] Error 2
make[3]: *** [profiles-do--all] Error 2
make[2]: *** [all-local] Error 2
make[2]: Leaving directory `/usr/local/src/mono-mono-3.10.0/runtime'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/usr/local/src/mono-mono-3.10.0'
make: *** [all] Error 2

那么,为什么"不能执行二进制文件"我能做些什么呢?我以root身份运行,所以不应该有任何权限问题。另外:

# ls -la /usr/local/src/mono-mono-3.10.0/mcs/class/lib/monolite/
total 8048
drwxr-xr-x 2 root root    4096 Jun  2  2014 .
drwxr-xr-x 3 root root    4096 Jan  9 16:21 ..
-rwxr-xr-x 1 root root  298496 Jun  2  2014 Mono.Security.dll
-rwxr-xr-x 1 root root  126464 Jun  2  2014 System.Configuration.dll
-rwxr-xr-x 1 root root  283136 Jun  2  2014 System.Core.dll
-rwxr-xr-x 1 root root  131072 Jun  2  2014 System.Security.dll
-rwxr-xr-x 1 root root 1291264 Jun  2  2014 System.Xml.dll
-rwxr-xr-x 1 root root 1681408 Jun  2  2014 System.dll
-rwxr-xr-x 1 root root 1743360 Jun  2  2014 basic.exe
-rwxr-xr-x 1 root root 2631168 Jun  2  2014 mscorlib.dll

这里有什么问题?


编辑:

一些进步,我能够实现几乎工作的单声道安装。我需要执行以下步骤:

git clone -b mono-3.10.0-branch https://github.com/mono/mono.git
git submodule init
git submodule update
./autogen.sh --with-ikvm-native=no
make get-monolite-latest monolite_url=http://storage.bos.xamarin.com/mono-dist-master/1b/1b41fd76350367453c8100f8bd0e7242105c6d39/monolite-111-latest.tar.gz
make EXTERNAL_MCS=${PWD}/mcs/class/lib/monolite/basic.exe

克隆3.10.0分支时,克隆不完整,缺少某些子模块。你需要运行git submodule init和git submodule update来获得单声道编译。

这些步骤单色编译和安装没有错误,但运行.Net软件是完全不同的事情。尝试运行我的控制台应用程序时,我仍然遇到异常:

System.InvalidProgramException: Invalid IL code in System.ComponentModel.Composition.Hosting.DirectoryCatalog:.ctor (string): method body is empty.

好吧,问题的编译部分已经解决,所以我猜这可以标记为已回答。

1 个答案:

答案 0 :(得分:2)

根据我在问题中的编辑进行单声道编译。我想我已经弄乱了一些文件权限或者basic.exe一开始就不存在。

我在编辑中给出的步骤使我的安装工作正常。