商讯信箱
用户名: @
密  码:   注册|忘记密码
登录
个人用户经销商
您的位置:首页 > 技术频道 > 正文

关于mono的编译与安装

作者:ITPUB论坛  2008-01-29

【IT168技术文档】

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

  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
1
【内容导航】
第1页: 概述
©版权所有。未经许可,不得转载。
[责任编辑:nancy]
[an error occurred while processing this directive]