之所以用源碼編譯的方式安裝mono和monodevelop,是因為通過yum安裝的mono不是最新版本,而且monodevelop不能建 asp.net MVC3的工程。
而且通過源碼安裝,可以進一步了解mono的各個項目之間的關系。
我用的Fedora16系統
下載mono的最新源碼,github上的源碼編譯時總是報找不到 gmcs.exe的錯誤。
我是在mono的官網上下的最新源碼,地址:https://wrench.mono-project.com/Wrench/index.aspx?show_all=true
我下的是mono-2.11.3版
# tar jxvf mono-2.11.3.tar.bz2
# cd mono-2.11.3
# ./autogen.sh --prefix=/usr/local
# make
# make install
需要注意的是用root用戶來安裝,否則有錯誤。
monodevelop的源碼編譯安裝相當曲折,搞了好幾天。
有幾點需要注意:
安裝monodevelop之前,按順序安裝一些依賴包:
(gtk-sharp --> mono-addins --> libglade2--> gnome-sharp-2.0)
這些包在安裝時也會遇到各種問題,下面是我安裝時遇到的各種問題及解決方法,供參考。
以上的安裝順序是我總結出來的,沒有試驗過。
我安裝時並不知道上面的安裝順序,是直接安裝monodevelop,然後遇到問題再解決的。我的安裝順序如下:
1) 和mono同樣的網址下載monodevelop的最新代碼。
# tar jxvf monodevelop-3.1.0.tar.bz2
# cd monodevelop-3.1.0
# ./configure --prefix=`pkg-config --variable=prefix mono`
此時報了一個錯誤如下:找不到 UNMANAGED_DEPENDENCIES_MONO
====================================================================
[root@localhost monodevelop-3.1.0]# ./configure --prefix=`pkg-config --variable=prefix mono`
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking how to create a ustar tar archive... gnutar
checking whether to enable maintainer-specific portions of Makefiles... no
checking for mono... /usr/local/bin/mono
checking for gmcs... /usr/local/bin/gmcs
checking for update-mime-database... /usr/bin/update-mime-database
checking for pkg-config... /usr/bin/pkg-config
checking for msgfmt... /usr/bin/msgfmt
checking for msgmerge... /usr/bin/msgmerge
checking pkg-config is at least version 0.9.0... yes
checking for UNMANAGED_DEPENDENCIES_MONO... no
configure: error: Please install mono version 2.8 or later to install MonoDevelop.
Please see http://www.mono-project.org/ to download latest mono sources or packages
====================================================================
通過以下命令修復此錯誤:
# export PKG_CONFIG_PATH=/usr/lib/pkgconfig:/usr/local/lib/pkgconfig
再次執行:
# ./configure --prefix=`pkg-config --variable=prefix mono`
此時報了一個錯誤如下:找不到 mono-addins
====================================================================
checking for UNMANAGED_DEPENDENCIES_MONO... yes
checking for mono... /usr/local/bin/mono
checking for dmcs... /usr/local/bin/dmcs
checking for MONO_ADDINS... no
configure: error: Package requirements (mono-addins >= 0.6) were not met:
No package 'mono-addins' found
Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.
Alternatively, you may set the environment variables MONO_ADDINS_CFLAGS
and MONO_ADDINS_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
====================================================================
下載mono-addins並安裝,
下載地址: http://download.mono-project.com/sources/mono-addins/
# tar jxvf mono-addins-0.6.2.tar.bz2
# cd mono-addins-0.6.2
# ./configure --prefix=/usr/local
此時報了一個錯誤如下:找不到 gtk-sharp-2.0
====================================================================
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking how to create a ustar tar archive... gnutar
checking whether to enable maintainer-specific portions of Makefiles... no
checking for pkg-config... /usr/bin/pkg-config
checking for a BSD-compatible install... /usr/bin/install -c
checking for gmcs... /usr/local/bin/gmcs
checking for gacutil... /usr/local/bin/gacutil
checking for al... /usr/local/bin/al
checking pkg-config is at least version 0.9.0... yes
checking for GTK_SHARP_20... configure: error: Package requirements (gtk-sharp-2.0) were not met:
No package 'gtk-sharp-2.0' found
Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.
Alternatively, you may set the environment variables GTK_SHARP_20_CFLAGS
and GTK_SHARP_20_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
====================================================================
下載gtk-sharp並安裝,
下載地址: http://download.mono-project.com/sources/gtk-sharp212/
# tar jxvf gtk-sharp-2.12.11.tar.bz2
# cd gtk-sharp-2.12.11
# ./configure --prefix=/usr/local
# make
# make install
gtk-sharp安裝成功後,接著安裝mono-addins
# cd ../mono-addins-0.6.2
# ./configure --prefix=/usr/local
# make
# make install
mono-addins安裝成功後,接著安裝monodevelop
# cd ../monodevelop-3.1.0
# ./configure --prefix=`pkg-config --variable=prefix mono`
此時報了一個錯誤如下:找不到 glade-sharp-2.0
====================================================================
[root@localhost monodevelop-3.1.0]# ./configure --prefix=`pkg-config --variable=prefix mono`
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking how to create a ustar tar archive... gnutar
checking whether to enable maintainer-specific portions of Makefiles... no
checking for mono... /usr/local/bin/mono
checking for gmcs... /usr/local/bin/gmcs
checking for update-mime-database... /usr/bin/update-mime-database
checking for pkg-config... /usr/bin/pkg-config
checking for msgfmt... /usr/bin/msgfmt
checking for msgmerge... /usr/bin/msgmerge
checking pkg-config is at least version 0.9.0... yes
checking for UNMANAGED_DEPENDENCIES_MONO... yes
checking for mono... /usr/local/bin/mono
checking for dmcs... /usr/local/bin/dmcs
checking for MONO_ADDINS... yes
checking for MONO_ADDINS_SETUP... yes
checking for MONO_ADDINS_GUI... yes
checking for GLIB_SHARP... yes
checking for GTK_SHARP... yes
checking for GLADE_SHARP... no
configure: error: Package requirements (glade-sharp-2.0 >= 2.12.8) were not met:
No package 'glade-sharp-2.0' found
Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.
Alternatively, you may set the environment variables GLADE_SHARP_CFLAGS
and GLADE_SHARP_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
====================================================================
我不知道glade-sharp是什麼包,先安裝了libgdiplus
下載libgdiplus並安裝,
下載地址: http://download.mono-project.com/sources/libgdiplus/
# tar jxvf libgdiplus-2.10.9.tar.bz2
# cd libgdiplus-2.10.9
# ./configure --prefix=/usr/local
# make
make時報了一個錯誤如下:
====================================================================
/usr/lib64/libglib-2.0.so.0: could not read symbols: Invalid operation
collect2: error: ld returned 1 exit status
make[2]: *** [testgdi] Error 1
make[2]: Leaving directory `/usr/local/src/libgdiplus-2.10.9/tests'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/usr/local/src/libgdiplus-2.10.9'
make: *** [all] Error 2
====================================================================
解決辦法如下:
1. 運行./configure --prefix=/usr/local 之後,編輯 tests/Makefile 文件
2. 在Makefile文件130行位置,將 LIBS = -lpthread -lfontconfig
改為 LIBS = -lpthread -lfontconfig -lglib-2.0 -lX11
3. 再次運行 make 即可
# make
# make install
接著安裝monodevelop
# cd ../monodevelop-3.1.0
# ./configure --prefix=`pkg-config --variable=prefix mono`
仍然是錯誤:找不到 glade-sharp-2.0
利用yum 安裝libglade2-devel,mono源碼中沒找到這個包
# yum search libglade2
# yum install libglade2-devel.x86_64
知道這個包的名稱,也可以找相應的rpm來安裝。
安裝完libglade2後,重新安裝 gtk-sharp2,安裝方法上面已有。
接著,再次嘗試安裝 monodevelop:
# ./configure --prefix=`pkg-config --variable=prefix mono`
此時報了一個錯誤如下:未安裝gnome-sharp-2.0
====================================================================
[root@localhost monodevelop-3.1.0]# ./configure --prefix=`pkg-config --variable=prefix mono`
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking how to create a ustar tar archive... gnutar
checking whether to enable maintainer-specific portions of Makefiles... no
checking for mono... /usr/local/bin/mono
checking for gmcs... /usr/local/bin/gmcs
checking for update-mime-database... /usr/bin/update-mime-database
checking for pkg-config... /usr/bin/pkg-config
checking for msgfmt... /usr/bin/msgfmt
checking for msgmerge... /usr/bin/msgmerge
checking pkg-config is at least version 0.9.0... yes
checking for UNMANAGED_DEPENDENCIES_MONO... yes
checking for mono... /usr/local/bin/mono
checking for dmcs... /usr/local/bin/dmcs
checking for MONO_ADDINS... yes
checking for MONO_ADDINS_SETUP... yes
checking for MONO_ADDINS_GUI... yes
checking for GLIB_SHARP... yes
checking for GTK_SHARP... yes
checking for GLADE_SHARP... yes
checking for MONODOC... yes
checking for GNOME_SHARP... no
checking for GNOME_VFS_SHARP... no
checking for GCONF_SHARP... no
configure: error: Cannot enable GNOME platform without gnome-sharp-2.0
====================================================================
下載 gnome-sharp-2.0 並安裝
下載地址: http://download.mono-project.com/sources/gnome-sharp220/
# tar jxvf gnome-sharp-2.20.1.tar.bz2
# cd gnome-sharp-2.20.1
# ./configure --prefix=/usr/local
雖然沒有報錯,但是提示缺少3個assmely: art-sharp.dll,gnomevfs-sharp.dll,gnome-sharp.dll
====================================================================
Configuration summary
* Installation prefix = /usr/local
* C# compiler: /usr/local/bin/mcs -define:GTK_SHARP_2_6 -define:GTK_SHARP_2_8 -define:GNOME_SHARP_2_16 -define:GNOME_SHARP_2_20
Optional assemblies included in the build:
* art-sharp.dll: no
* gnomevfs-sharp.dll: no
* gnome-sharp.dll: no
NOTE: if any of the above say 'no' you may install the
corresponding development packages for them, rerun
autogen.sh to include them in the build.
gnome-sharp.dll requires libgnomecanvas, libgnome,
libgnomeui, libgnomeprint, libgnomeprintui, and
libpanelapplet.
====================================================================
下面的兩個dll對應如下庫:(我是通過 yum找到的)
art-sharp.dll : libart_lgpl-devel
gnomevfs-sharp.dll: gnome-vfs2-devel
最後一個根據上面的提示,(對應如下庫)
gnome-sharp.dll : libgnomecanvas, libgnome,
libgnomeui, libgnomeprint, libgnomeprintui, and
libpanelapplet(即gnome-panel-devel)
# make
make 後,報出如下錯誤:
====================================================================
error CS0006: Metadata file `Mono.GetOptions.dll' could not be found
====================================================================
經過調查,
1. 原來是gnome-sharp版本太舊的原因,
前面用的gnome-sharp-2.20.*用了Mono.GetOptions,更新至gnome-sharp-2.24.*
2. 注釋掉gnome-sharp-2.24.1/sample/gnomevfs/Makefile中關於 Mono.GetOptions的內容
下載地址:http://download.mono-project.com/sources/gnome-sharp2/
# tar jxvf gnome-sharp-2.24.1.tar.bz2
# cd gnome-sharp-2.24.0
# ./configure --prefix=/usr/local
# make
# make install
接著,再次嘗試安裝 monodevelop:
# ./configure --prefix=`pkg-config --variable=prefix mono`
此時會產生一些找不到 tests/UnitTests/Makefile.in 之類的錯誤。
經過調查,似乎是monodevelop 版本的問題,在monodevelop官網上下載最新的代碼,
然後重新安裝,終於安裝成功。官網上最新版是3.0.3.4
# tar jxvf monodevelop-3.0.3.4.tar.bz2
# cd ../monodevelop-3.0.3.4
# ./configure --prefix=`pkg-config --variable=prefix mono`
# make
# make install
安裝完後,monodevep卻無法啟動,錯誤如下:
====================================================================
System.TypeInitializationException: An exception was thrown by the type initializer for Mono.Unix.Native.Syscall ---> System.DllNotFoundException: libMonoPosixHelper.so
at (wrapper managed-to-native) Mono.Unix.Native.Syscall:_L_ctermid ()
at Mono.Unix.Native.Syscall..cctor () [0x00032] in /home/wangyb/downloads/mono/mono-2.11.3/mcs/class/Mono.Posix/Mono.Unix.Native/Syscall.cs:2599
--- End of inner exception stack trace ---
at MonoDevelop.Core.LoggingService.RedirectOutputToFileUnix (FilePath logDirectory, System.String logName) [0x0001f] in /home/wangyb/downloads/mono/monodevelop-3.0.3.4/src/core/MonoDevelop.Core/MonoDevelop.Core/LoggingService.cs:177
at MonoDevelop.Core.LoggingService.RedirectOutputToLogFile () [0x00046] in /home/wangyb/downloads/mono/monodevelop-3.0.3.4/src/core/MonoDevelop.Core/MonoDevelop.Core/LoggingService.cs:140
FATAL ERROR [2012-07-29 07:59:49Z]: MonoDevelop failed to start. Some of the assemblies required to run MonoDevelop (for example gtk-sharp, gnome-sharp or gtkhtml-sharp) may not be properly installed in the GAC.
System.TypeInitializationException: An exception was thrown by the type initializer for Gtk.Application ---> System.DllNotFoundException: glibsharpglue-2
at (wrapper managed-to-native) GLib.Thread:glibsharp_g_thread_supported ()
at GLib.Thread.get_Supported () [0x00000] in <filename unknown>:0
at Gtk.Application..cctor () [0x00000] in <filename unknown>:0
--- End of inner exception stack trace ---
at MonoDevelop.Ide.IdeStartup.Run (MonoDevelop.Ide.MonoDevelopOptions options) [0x00085] in /home/wangyb/downloads/mono/monodevelop-3.0.3.4/src/core/MonoDevelop.Ide/MonoDevelop.Ide/IdeStartup.cs:95
at MonoDevelop.Ide.IdeStartup.Main (System.String[] args) [0x00058] in /home/wangyb/downloads/mono/monodevelop-3.0.3.4/src/core/MonoDevelop.Ide/MonoDevelop.Ide/IdeStartup.cs:503
====================================================================
將LD_LIBRARY_PATH加入到啟動的配置文件中,即 ~/.bashrc
內容如下:
# add mono LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/usr/local/lib
終於啟動成功,也有 aspnet-mvc3的工程了 ^_^
記錄下安裝過程的錯誤,也是方便以後遇到相同的錯誤可以知道怎麼解決。
大家在安裝過程中如果有什麼新的問題,歡迎交流。