关于mono的编译与安装

我写的关于如何在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
<script type="text/javascript"> if ($ != jQuery) { $ = jQuery.noConflict(); } var isLogined = false; var cb_blogId = 9866; var cb_entryId = 332147; var cb_blogApp = "pigboy"; var cb_blogUserGuid = "6996310b-63cf-dd11-9e4d-001cf0cd104b"; var cb_entryCreatedDate = '2006/2/16 23:45:00'; </script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这几天看了很多关于脱离框架运行C#程序的文章,千篇一律,都是讲飞信方案的,此方案涉及一些法律问题,只能自己研究一下,后来用google美国网站搜了一把,看了些文章,无意中发现mono,又用mono关键字到google中国搜了一把,已经有人实现控制台程序脱离.net框架了。 其实就是换mono的公共语言运行时来使用。这样做的好处是体积小,发布免安装。首先,您需要下载mono的最新版。 http://ftp.novell.com/pub/mono/archive/1.9.1/windows-installer/2/mono- 1.9.1-gtksharp-2.10.4-win32-2.exe,安装后,就可以继续进行了。 1、用Visual Studio创建一个Windows应用程序,假设叫做WinApp,并添加一个按钮。 2、编译此项目,得到一个WinApp.exe文件。 3、自己建立一个文件夹WinApp,其中再建立bin和lib这两个文件夹 4、将mono安装文件夹中的bin和lib子文件夹中需要的文件拷贝至刚才建立的那两个文件夹。mono的默认安装位置是:C:\Program Files\Mono-1.9.1 5、将需要运行的exe文件放入WinApp文件夹。 6、调用,可以使用bat批处理来调用,bin\mono.exe WinApp.exe。(其实写个VC++的小程序调用最好,可以我很菜) 好了,发个代码上来,有兴趣的朋友可以研究一下,7zip打包后仅3.26MB,却实现了免安装微软庞大的框架。此测试项目我在纯净的虚拟机和本机均测试过,但有个bug,mono对中文路径支持不好,如若有中文路径,则无法运行。我后来又试了用C:\Program Files\Mono-1.9.1\bin\mono.exe来执行,则没有中文路径问题。我觉得缺少了哪个文件,一个一个试着拷贝到WinApp文件夹中,再用批处理来执行,还是错误。后来干脆将整个安装目录的文件全搬到WinApp目录中,执行批处理还是失败,可是用C:\Program Files\Mono-1.9.1\bin\mono.exe来执行就是能成功,百思不得其解啊!究竟少了什么东西呢? 注意:例子中的dll文件已经为最精简,一个都不能缺少,我是用最笨的办法,删除到回收站,运行,重复此过程来确定需要保留哪些dll的。如果你机子上装有.net框架,你当然可以直接运行此程序,或者用bat来运行也可以,效果是不一样的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值