leeagle 2011-04-14
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