从源代码编译 Mono 2.11.4
基本步骤如下所示:
~$ cd repo repo$ wget http://download.mono-project.com/sources/mono/mono-2.11.4.tar.bz2 repo$ tar xjf mono-2.11.4.tar.bz2 repo$ du -hs mono-2.11.4* 438M mono-2.11.4 40M mono-2.11.4.tar.bz2 repo$ cd mono-2.11.4 mono-2.11.4$ ./configure --prefix=/opt/mono-2.11.4 ...... mcs source: mcs Engine: GC: sgen and bundled Boehm GC with typed GC and parallel mark TLS: __thread SIGALTSTACK: yes Engine: Building and using the JIT oprofile: no BigArrays: no DTrace: no LLVM Back End: no (dynamically loaded: no) Libraries: .NET 2.0/3.5: yes .NET 4.0: yes .NET 4.5: yes MonoDroid: no MonoTouch: no Mobile: no JNI support: IKVM Native libgdiplus: assumed to be installed zlib: system zlib mono-2.11.4$ make mono-2.11.4$ sudo make install
验证安装结果
试运行一下:
~$ /opt/mono-2.11.4/bin/mono --version Mono JIT compiler version 2.11.4 (tarball 2012年 10月 12日 星期五 09:57:56 CST) Copyright (C) 2002-2012 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com TLS: __thread SIGSEGV: altstack Notifications: epoll Architecture: amd64 Disabled: none Misc: softdebug LLVM: supported, not enabled. GC: Included Boehm (with typed GC and Parallel Mark) ~$ /opt/mono-2.11.4/bin/mcs --version Mono C# compiler version 2.11.4.0
检查一下 Arch Linux 自带的 Mono 2.10.8:
~$ mono --version Mono JIT compiler version 2.10.8 (tarball Sat Oct 6 23:22:30 UTC 2012) Copyright (C) 2002-2011 Novell, Inc, Xamarin, Inc and Contributors. www.mono-project.com TLS: __thread SIGSEGV: altstack Notifications: epoll Architecture: amd64 Disabled: none Misc: softdebug LLVM: supported, not enabled. GC: Included Boehm (with typed GC and Parallel Mark) ~$ mcs --version Mono C# compiler version 2.10.8.0
检验 .NET Framework 和 CLR 版本
如下所示:
ClrInfo$ /opt/mono-2.11.4/bin/mono ClrInfo40.exe OS Version: Unix 3.5.6.1 CLR Version: 4.0.30319.17020 ( 2.11.4 (tarball 2012年 10月 12日 星期五 09:57:56 CST) ) Default Encoding: System.Text.UTF8Encoding System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.IO.Packaging.Package, WindowsBase, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 System.TimeZoneInfo, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Available Frameworks: Mono 1.0 Profile Mono 2.0 Profile ClrInfo$ mono ClrInfo40.exe OS Version: Unix 3.5.6.1 CLR Version: 4.0.30319.1 ( 2.10.8 (tarball Sat Oct 6 23:22:30 UTC 2012) ) Default Encoding: System.Text.UTF8Encoding System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.IO.Packaging.Package, WindowsBase, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 System.TimeZoneInfo, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Available Frameworks: Mono 1.0 Profile Mono 2.0 Profile
可见 Mono 2.11.4 已经支持 .NET Framework 4.5 和 CLR 4.5 了。Microsoft .NET Framework 4.5 RTM 和 CLR 4.5 对应的版本号是: 4.0.30319.17929。Mono 2.11.4 因为是 Alpha 版本,所以对应的版本号是 4.0.30319.17020。Microsoft .NET Framework 4.5 是就地替换 .NET Framework 4,她们的版本号都是 4.0.30319,一般认为 Revision 小于 17000 就是 .NET 4,大于 17000 就是 .NET 4.5。
磁盘占用
我们来看看 Mono 需要占用多少磁盘空间吧:
~$ du -hs repo/mono-2.11.4 /opt/mono-2.11.4 1.2G repo/mono-2.11.4 325M /opt/mono-2.11.4 ~$ pacman -Qi mono 名称 : mono 版本 : 2.10.8-2 URL地址 : http://www.mono-project.com/ 软件许可 : GPL LGPL2 MPL custom:MITX11 软件组 : 无 提供 : monodoc 依赖于 : zlib libgdiplus>=2.10 sh 可选依赖 : 无 要求被 : dbus-sharp gtk-sharp-2 mono-addins monodevelop 冲突与 : monodoc 取代 : 无 安装后大小:139620.00 KiB 打包者 : Tom Gundersen <teg@jklm.no> 架构 : x86_64 编译日期 : 2012年10月07日 星期日 07时28分31秒 安装日期 : 2012年10月11日 星期四 08时07分59秒 安装原因 : 单独指定安装 安装脚本 : 否 描述 : Free implementation of the .NET platform including runtime and compiler
可以看出,Mono 2.11.4 源代码经编译后占用 1.2 GB 的磁盘空间,如果不研究源代码的话,安装完成后就可以删除了。Mono 2.11.4 目标代码占用 325 MB 的磁盘空间。而 Arch Linux 自带的 Mono 2.10.8 软件包占用大约 139 MB 的磁盘空间。