原文:http://nluyan.vicp.net/showdetails.aspx?postid=190
開始Mono之旅-Mono安裝指南 擷取 Mono
目前可以通過以下四種途徑擷取 Mono 軟體包 。
• 到 Mono 的官方網站下載發行版安裝包:
這裡提供了各種不同種類的正式發行版或階段性發行版,人們可以自由選擇所需要的類型。這裡所提供的安裝包一般都經過了測試,能正確的編譯和運行。
在: http://www.go-mono.com/download.html
• 日發行包:
假如你希望能密切的跟蹤 Mono 的開發進展,或者你想看到 Mono 的開發曆史腳步,你可以在 http://go-mono.com/daily/ 這個地址擷取 Mono 的日發行包。日發行包包括了每一天 Mono 項目的開發進展。共分為以下 3 種不同的類型:
- Mono: 這是一個可以進行編譯的運行時和類庫的原始碼包(包含了 C# 的所有二進位控制項)。 只要你有一個 C 編譯器就可以編譯和安裝使用了。最新的版本可以直接通過 http://go-mono.com/daily/mono-latest.tar.gz 來下載。
- MonoCharge: 包含了所有進行編譯過的 Mono 的 C# 組件和可執行程式。可以使用它來全面更新你已安裝的 Mono 類庫和工具。
最新版本可以直接通過 http://go-mono.com/daily/monocharge-latest.tar.gz 來下載。
- MonoLite: MonoLite 包和 MonoCharge 包一樣,也提供了讓你更新 Mono 的能力,不過它只包含了最基本的核心類庫 corlib, System, System.Xml 和 C# 編譯器。
最新版本可以直接通過 http://go-mono.com/daily/monolite-latest.tar.gz 來下載。
• 通過 CVS 伺服器擷取 Mono 源碼 .
CVS 是一個功能強大的原始程式碼控制伺服器。假如你認為每天更新一次的日發行包還是不能滿足你狂熱的追求最新代碼的需求的話,那麼還可以通過訪問 Mono 的 CVS 伺服器直接擷取 Mono 正在開發中的原始碼庫,因為有可能你得到的代碼是一分鐘前由 Mono 的開發人員剛剛提交上去的。
在 Linux 下訪問:
首先要確認你的系統上已經安裝了 CVS 用戶端軟體,如果沒有的話,可以到 http://www.cvshome.org/ 去下載。
在控制台下輸入如下命令:
export CVSROOT=server:anonymous@anoncvs.go-mono.com:/mono cvs login (系統提示要輸入密碼,可以直接斷行符號) cvs -z3 co mono
其中的 mono 為項目名稱,也可以換成別的項目,例如 mcs 和 gtk-sharp 。然後就可以看到正在從伺服器上下載檔案, CVS 會自動在目前的目錄下建立一個和伺服器上的目錄結構保持一致的專案檔目錄。
• CVS 快照
Available for curious developers which do not necessarily want to install the CVS source. Baked daily.
Linux上安裝
Mono 的分發包有兩種形式,一種是源碼包,需要手工進行編譯,另一種是二進位包,可以直接安裝。 源碼包的適用範圍比較廣,能夠適合幾乎所有的 Linux ,但是步驟比較麻煩,所需時間較長。相反,二進位包的安裝比較簡單,但是適用範圍比較窄,只能在某些特定的 Linux 系統下安裝,典型的有 RedHat Linux 的 RPM 安裝包。
核心的 Mono 分成了兩部分:
• C 組成部分(包含在 Mono 軟體包中)
包含了運行 Mono 的所有必要成分,是 Mono 的運行環境。
• C# 組成部分(包含在 MCS 軟體包中)
包含了類庫,編譯器等使用 C# 編寫的內容部分。
原始碼安裝:
原始碼安裝是指下載 Mono 的原始碼,然後在本地進行編譯,
假如你是下載的 Mono 的壓縮安裝包,可以輸入以下命令進行解壓縮:
tar zxfv mono-X.XX.tar.gz
其中 X.XX 是 Mono 的版本號碼。
解壓縮完成後,將會看到在目前的目錄下的一個子目錄,名稱一般會是: mono-X.XX 。
進入該子目錄,輸入: ./configure
你將看到類似如下的狀態資訊:
[root@localhost mono-1.0]# ./configure checking build system type... i686-pc-linux-gnu checking host system type... i686-pc-linux-gnu checking target system type... i686-pc-linux-gnu checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for gawk... gawk checking whether make sets $(MAKE)... yes checking whether to enable maintainer-specific portions of Makefiles... no checking host platform characteristics... ok checking for gcc... gcc checking for gcc... (cached) gcc checking for C compiler default output... a.out checking whether the C compiler works... yes checking whether we are cross compiling... no checking for suffix of executables... checking for suffix of object files... o 中間略過 … config.status: creating Makefile config.status: creating include/Makefile config.status: creating include/private/Makefile config.status: creating doc/Makefile config.status: executing depfiles commands config.status: executing default commands GC: included ICU: no, if you want full i18n support download it from: http://oss.software.ibm.com/icu/index.html NPTL: yes SIGALTSTACK: yes Engine: Building and using the JIT |
這表示 configure 程式正在配置 Mono 的 Makefile 檔案,為下一步編譯 Mono 做好準備。假如在此過程中出現了異常中斷,並且目錄中也沒有產生 Makefile 檔案,則需要根據系統提示找出出現錯誤的原因,一般可能是因為缺少某些編譯 Mono 所必須的軟體,例如假設你沒有安裝 Gnome X-Window 的話,則需要手動安裝 pkg-config 和 glib-2.0 ,這兩個軟體可以分別在 http://www.freedesktop.org/Software/pkgconfig 和 ftp://ftp.gtk.org 處下載。
接下來就可以開始編譯 Mono 了,直接在命令列輸入 make ,你可以看到類似如下的輸出資訊:
| [root@localhost mono-1.0]# make make all-recursive make[1]: Entering directory `/mono/mono-1.0' Making all in libgc make[2]: Entering directory `/mono/mono-1.0/libgc' Making all in include make[3]: Entering directory `/mono/mono-1.0/libgc/include' gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../.. -I../../libgc/include -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include -pthread -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include -DGC_LINUX_THREADS -DMONO_USE_EXC_TABLES -D_GNU_SOURCE -D_REENTRANT -fexceptions -D_FILE_OFFSET_BITS=64 -g -O2 -fno-strict-aliasing -g -Wall -Wunused -Wmissing-prototypes -Wmissing-declarations -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs -Wpointer-arith -Wno-cast-qual -Wcast-align -Wwrite-strings -c -o genmdesc-helpers.o `test -f 'helpers.c' || echo './'`helpers.c /bin/sh ../../libtool --mode=link gcc -g -O2 -fno-strict-aliasing -g -Wall -Wunused ./genmdesc ./cpu-sparc.md cpu-sparc.h sparc_desc make all-am |
其中的由配置指令碼產生的編譯資訊可能看起來會非常雜亂,不過不用擔心,這些都是很正常的現象。另外在編譯過程中,依賴不同效能的機器,可能需要的的時間會比較長,請耐心等待。
在編譯完成之後,可以輸入 make install 來進行安裝,這個步驟會將 mono 的一些指令碼和可執行程式複製到作業系統可以找得到的地方,預設情況是: /usr/local/bin 。
現在,你可以在命令列輸入: mono ,假如出現了以下協助資訊(其具體含義在後面章節有詳細介紹):
Usage is: mono [options] assembly Runtime and JIT debugging: --compile METHOD Just compile METHOD in assembly --ncompile N Number of times to compile METHOD (default: 1) --regression Runs the regression test contained in the assembly --print-vtable Print the vtable of all used classes --trace[=EXPR] Enable tracing, use --help-trace for details --compile-all Compiles all the methods in the assembly --breakonex Inserts a breakpoint on exceptions --break METHOD Inserts a breakpoint at METHOD entry --debug Enable debugging support --stats Print statistics about the JIT operations Development: --statfile FILE Sets the stat file to FILE --aot Compiles the assembly to native code --profile[=profiler] Runs in profiling mode with the specified profiler module --graph[=TYPE] METHOD Draws a graph of the specified method: cfg Control Flow Graph (CFG) dtree Dominator Tree code CFG showing code ssa CFG showing code after SSA translation optcode CFG showing code after IR optimizations Runtime: --config FILE Loads FILE as the Mono config --verbose, -v Increases the verbosity level --help, -h Show usage information --version, -V Show version information --optimize=OPT Turns on a specific optimization: peephole Peephole postpass branch Branch optimizations inline Inline method calls cfold Constant folding consprop Constant propagation copyprop Copy propagation deadce Dead code elimination linears Linear scan global reg allocation cmov Conditional moves shared Emit per-domain code sched Instruction scheduling intrins Intrinsic method implementations tailc Tail recursion and tail calls loop Loop related optimizations fcmov Fast x86 FP compares leaf Leaf procedures optimizations aot Usage of Ahead Of Time compiled code precomp Precompile all methods before executing Main |
那麼恭喜,你已經正確的安裝完成了 Mono 運行環境,可以在 Linux 下運行和編譯 .Net 應用程式了。
卸載 Mono 也很簡單,只要輸入 make uninstall ,就會自動的刪除所有安裝的可執行程式和指令碼。如果你希望重新編譯安裝 Mono ,則可以先輸入: make distclean ,然後按照剛才的順序輸入: ./configure , make , make install 。
Windows上安裝
Mono 本身是一個跨平台的環境,因此它完全可以在 Windows 平台下運行,也許你會發出這樣的疑問:既然 Windows 平台上已經有了 Microsoft .Net Framework ,那麼為什麼我還要在 Windows 下安裝 Mono 呢?
這是因為:
1 .雖然 Mono 和 Microsfot .Net 能在大部分的情況下保持相容,但是 Mono 還有它自己的擴充部分,例如數量遠遠超過 Microsoft .Net 的資料庫提供者。
2 .方便調試。大部分的程式員還是習慣在 Windows 上進行軟體開發,畢竟 Windows 的開發環境比 Linux 要好得多。比如可以在 Windows 下使用 Visual Studio 進行開發,然後直接調試對 Mono 的相容性問題,而不用再切換到 Linux 下。
3 .可以查看 .Net 的類庫原始碼。 Mono 是開源項目,意味著你可以查看到類庫的 C# 原始碼,而 Microsoft .Net 就不能夠看到。對於開發人員理解 .Net 類庫的設計和實現是非常有協助的。
首先需要到 Mono 的下載頁面去下載 Windows 安裝軟體包,它其實是一個自解壓的壓縮包,因此不會在開始菜單程式欄中產生任何的捷徑,實際上, Mono 自身還沒有任何的圖形介面,目前你只能在控制台中才能正確使用 Mono 。
目前這個 版本的 Mono 還不是很完善,在安裝完成後,如果你直接進入目錄下輸入 mono 會產生一些找不到動態串連庫的錯誤,所以還需要手動添加動態串連庫的路徑到 path 環境變數中,使用如下命令:
Path=%path%;c:/programe files/mono-1.0/bin;c:/programe files/mono-1.0/icu/bin
然後再到 bin 目錄下執行 mono ,便可以看見正確的協助提示資訊。
盧彥
2004-7-4