关于mono的编译与安装

leeagle 2011-04-14

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

1.为了与时俱进,我决定从mono的svn上下载最新的代码来编译。

先准备代码,建立目录将代码check出来:

svncosvn://svn.myrealbox.com/source/trunk/mcs

svncosvn://svn.myrealbox.com/source/trunk/mono

svncosvn://svn.myrealbox.com/source/trunk/monodoc

svncosvn://svn.myrealbox.com/source/trunk/gtk-sharp

svncosvn://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的话:sudoapt-getinstallmono,第二

种方法,在check出来的mono目录中运行:

makeget-monolite-latest

不过,这种方法经常报如下错误:

Corlibnotinsyncwiththisruntime:expectedcorlibversion43,found41.

原因是在mono/metadata/appdomain.c文件中:

#defineMONO_CORLIB_VERSION43

mscorlib.dll的版本号为43,而我刚下载的monolite(20051110)

的mscorlib.dll的版本号为41不一致无法编译,所以还是第一

中方法好些。

编译系统

make

在安装mono系统之前将先前安装的mono包删除,然后安装

sudomakeinstall

或者

sudocheckinstall

sudodpkg-i*.deb

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

3.安装monodoc

./autogen.sh--prefix=/usr

make

sudomakeinstall

或者

sudocheckinstall

sudodpkg-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


#definecairo_private

#endif
然后在后面添加,将private定义为空

#definecairo_private
<scripttype="text/javascript">if($!=jQuery){$=jQuery.noConflict();}varisLogined=false;varcb_blogId=9866;varcb_entryId=332147;varcb_blogApp="pigboy";varcb_blogUserGuid="6996310b-63cf-dd11-9e4d-001cf0cd104b";varcb_entryCreatedDate='2006/2/1623:45:00';</script>

相关推荐