我写的关于如何在linux编译安装mono的文章,全文如下。。。

1.为了与时俱进,我决定从mono的svn上下载最新的代码来编译。
先准备代码,建立目录将代码check出来:
svn co svn://svn.myrealbox.com/source/trunk/mcs
svn co svn://svn.myrealbox.com/source/trunk/mono
svn co svn://svn.myrealbox.com/source/trunk/monodoc
svn co svn://svn.myrealbox.com/source/trunk/gtk-sharp
svn co svn://svn.myrealbox.com/source/trunk/mono-tools

2.编译mono基本系统
进入check出来的mono目录:
./autogen.sh --prefix=/usr --sysconfdir=/etc

如果从svn来编译会有一个问题,因为mcs(mono的cs编译器)
是用cs写,我们要编译cs程序就必须有个mcs的编译器,而mcs
是用cs代码写的,所以必须系统中必须事先存在一个mcs,在
发布版的tar.gz包里已经包含了一个mcs,而svn上的没包含,
有两种方法可以解决,一个是先下一个编译好的mono包安装,
比如如果是ubuntu的话:sudo apt-get install mono,第二
种方法,在check出来的mono目录中运行:
make get-monolite-latest
不过,这种方法经常报如下错误:
Corlib not in sync with this runtime: expected corlib version 43, found 41.
原因是在mono/metadata/appdomain.c文件中:
#define MONO_CORLIB_VERSION 43
mscorlib.dll的版本号为43,而我刚下载的monolite(20051110)
的mscorlib.dll的版本号为41不一致无法编译,所以还是第一
中方法好些。

编译系统
make

在安装mono系统之前将先前安装的mono包删除,然后安装
sudo make install
或者
sudo checkinstall
sudo dpkg -i *.deb

mono基本系统编译时会自动编译mono和mcs目录下的文件。

3.安装monodoc
./autogen.sh --prefix=/usr
make
sudo make install
或者
sudo checkinstall
sudo dpkg -i *.deb
monodoc里面包含的只是制作mono帮助的工具和assembly,而
帮助阅览器在mono-tools中,后面的包都会用到monodoc来制
作帮助,所以要提前编译它。

4.安装gtk-sharp
编译安装方法同上。

5.安装mono-tools
这个包可能比较陈旧了编译时会遇到一些问题。
a.首先找不到gtk-sharp.pc等这样的东西。
解决方法将/usr/lib/pkgconfig中的*-sharp-2.0.pc都拷贝
一份命名*-sharp.pc。
b.编译时报无编译admin.exe的方法。
将mono-tools/docbrowser/Makefile中相关admin的部分屏蔽,
如果用gtkhtml-sharp做帮助浏览器的引擎就不会出现这样的
问题,如果哦用gecko-sharp做引擎好像就会出现。
编译安装方法同上

其他包的注意事项:
libgdiplus,因为它用到cairo,而当前cvs上的cairo有几个
原来公开的函数私有话了,所以编译时会报未定义函数的错
误(比如_cairo_box_round_to_rectangle),解决方法:
在cairo/src/cairoint.h中找到cairo_private定义的地方,
如下

/* slim_internal.h */

#if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)) && defined(__ELF__)

#define cairo_private   __attribute__((__visibility__("hidden")))
#else
#define cairo_private
#endif
然后在后面添加,将private定义为空
#define cairo_private