Mono 1.2.6安装磨难之旅

软件和网站开发以及相关技术探讨
回复
icefireelf
帖子: 3
注册时间: 2007-04-12 14:29

Mono 1.2.6安装磨难之旅

#1

帖子 icefireelf » 2007-12-21 3:10

在文章之前,先向喜欢Mono的朋友们通告一个好消息,Mono 1.2.6与MonoDevelop 0.18 beta3今天发布了,又增加了许多新功能和特性。虽然http://www.mono-project.com/上写着Mono 1.2.6的发布日期是12月12号,但其实一直没给出链接,估计一直在等最新的MonoDevelop 0.18,上www.monodevelop.com一看,果然也给出了新版的源,不过这次的匆忙发布存在着不少问题,我也因此开始了磨难之旅。
以前都是通过apt来安装,mono官方也始终不给deb版安装程序,这次有点迫不及待,于是下载了mono-project上的for x86全distr版。下载的文件是个60M左右的.bin文件,奇怪的是用ubuntu上的md5sum检验出来的码与官方给的MD5值不同:-(,无论下几次都一样,但不影响安装,忽略。
将以前版本的包卸载后就可以进行安装(貌似也可以同时装几个版本,没试)。安装过程很简单,将下下来的.bin文件赋以执行权限,在桌面双击即可。剩下来的过程跟windows程序安装一样,一路“Next”即可,默认的安装路径在主目录下,我没有修改。这个.bin集成了Mono所需的绝大多数包和扩展,以及MonoDevelop和MonoDoc等。
装好之后,桌面出现一个“Mono”的图标,双击后进入Mono的安装目录。在安装目录下有Mono Doc,MonoDevelop等图标,我见之大喜,即准备开始新版的Mono体验,然后麻烦也随之而来:

1.双击MonoDevelop的快捷方式,等了半天没有反应。嗯?莫非Mono没装成功?赶紧跑到终端下,找到以前编的一个程序集,运行: $ mono ×××.exe
结果该程序集运行正常,看来mono本身没有问题,那么问题就应该出在MonoDevelop上了,后来的事实证明,这次MonoDevelop确实存在着不少问题。
在终端下执行:$type monodevelop
返回结果:monodevelop is /home/用户名/mono-1.2.6/bin/monodevelop
/home/用户名/mono-1.2.6/是monodevelop的安装目录,立即进入/home/用户名/mono-1.2.6/bin下,发现monodevelop其实是一个脚本,由它来设置一些环境变量,并调用 mono MonoDevelop.exe,但问题是这次脚本写得相当有问题,甚至连MonoDevelop.exe所在的路径都没设置对,因此双击图标自然没反应。这个好解决,好歹俺也有点shell基础,将路径改回来即可。
用vi编辑monodevelop文件,发现主要问题在于MD_BIN_PATH这个环境变量没设置正确,原文件中有如下一句:
MD_BIN_PATH=/usr/bin
有点汗吧,明明是安装在主目录下,能从/usr/bin下找到MonoDevelop.exe么?没想到Mono还能犯这么低等的错误,估计是发布得太匆忙了,没作充分的平台测试。事实上MonoDevelop.exe位于"~/mono-1.2.6/lib/monodevelop/bin"下,因此将上面语句改为:
MD_BIN_PATH=/home/用户名/mono-1.2.6/lib/monodevelop/bin
另外我发现其MD_PKG_CONFIG_PATH这个环境变量也很有问题,居然没把安装目录下的pkgconfig目录包括进去,顺便将其也修改:
MD_PKG_CONFIG_PATH=/home/用户名/.mono-1.2.6/lib/pkgconfig/:/home/dubuntu/.mono-1.2.6/share/pkgconfig/:/usr/lib/pkgconfig/:/usr/local/lib/pkgconfig/:/usr/share/pkgconfig/:/usr/local/share/pkgconfig/
将脚本保存,返回。

2.再次点击MonoDevelop图标,呵呵,终于出初始化的splash画面了,咦,怎么?初始化到一半终止了!!问题又接踵而来。
只有又回到终端,用命令运行monodevelop,终端下会有错误输出。果然,程序执行到一半发生异常,说是libxml2.so.0中有未知的符号。是和libxml2冲突吗?难道要卸载libxml2库?这是个愚蠢的想法,libxml2可是一个十分重要的库,许多程序都依赖于它。看来只有放弃使用新版MonoDevelop了,可是又不甘心,我将出错信息在google上搜索(为什么不用百度?汗,这种关于linux英文软件的问题问百度基本相当于无解,一是因为百度的英文网页数据库太小,二是中国人自己没多少爱捣鼓这东西,这不能不说是一个悲哀)。发现果然有许多人遇见过这个问题,不过解决方法有点野蛮:删除libz.so.1文件。
这个文件位于~/mono-1.2.6/lib下,如果是源码安装的话可能位于/usr/local/lib下,用locate命令找一下即可。我没敢贸然删除,用mv将其改名为libz.so.1.bak了。再次运行monodevelop,哈哈,一口气进入了,新建项目,没问题!再次思考,这应该是包的兼容性问题,ls -l libz*看了一下,发现libz.so.1其实是一个符号连接,指向当前目录的libz.so.1.2.1,而系统安装再/usr/lib下的libz版本是libz.so.1.2.3.3,为了尽量保持程序稳定,我决定重建一个连接:
ln -s /usr/lib/libz.so.1.2.3.3 libz.so.1
重起MonoDevelop,顺利进入。看来MD兼容这个高版本的libz,这样比删除它好。

3.到上面为止似乎大功告成了,其实不然,副作用还未解除,又怎么啦?我的gedit出问题了,在终端模式下运行gedit(从桌面进入正常),发现会输出错误信息“warning: ... libpng12.so.0: no version information available (required by ... object class `GeditView' has no property named `indent_on_tab' ”
我确认在没装mono之前是没这个warning的,虽然是个警告,但不代表可以视之不理,此后更严重的问题来了,在gedit中虽然可以打字,但方向键失去了作用,只能用鼠标定位,每次按键控制台都不断弹出严重错误:CRITICAL **: gedit_view_move_cursor: assertion `!gtk_source_view_get_smart_home_end ( GTK_SOURCE_VIEW (text_view))' failed
最后gedit终于崩溃了,引来了bug buddy。从字面看,仿佛又是一个库冲突。但一想不对,如果库冲突怎么从桌面启动gedit没问题呢?那么只有一种可能,终端的环境变量被修改了。通过搜索发现,这是因为mono自带安装了gtksourceview(用以高亮语法显示),并修改了.bashrc中LD_LIBRARY_PATH这个环境变量(安装时会问你是否修改,我点了yes),而gedit使用的gtksourceview的环境变量与之不符合,故而出错。
解决办法:将~/.bashrc中的变量设回原来的值,我直接将其屏蔽:
#export LD_LIBRARY_PATH="/home/dubuntu/.mono-1.2.6/lib:$LD_LIBRARY_PATH"
#export PKG_CONFIG_PATH="/home/dubuntu/.mono-1.2.6/lib/pkgconfig:$PKG_CONFIG_PATH"

这时我才焕然大悟,为什么MD_PKG_CONFIG_PATH不加安装目录的pkgconfig,原来在.bashrc中已经设置过了,但现在我将这两个变量的设置屏蔽后,gedit正常运行了,MonoDevelop又启动不了了,抛出大量的异常。
没事,将以上两个赋值copy到monodevelop脚本的最前面,去掉#号即可。

另外,该脚本很多的条件判断都写的不规范,如:
[ -n $PKG_CONFIG_PATH ]、 [ -z $LD_LIBRARY_PATH ]
这些语句在PKG_CONFIG和LD_LIBRARY_PATH为空时会出错,应加上双引号,如:
[ -n “$PKG_CONFIG_PATH” ]、 [ -z “$LD_LIBRARY_PATH” ]
至此,所有磨难才告结束,gedit与monodevelop并行不悖。


问题总结:
1.运行MonoDevelop时,环境变量的设置相当重要,一定要确保该进程的LD_LIBRARY_PATH与PKG_CONFIG_PATH中有其默认的搜索路径,但我认为安装时可以在.bashrc中修改MANPATH与PATH,却不应该修改LD_LIBRARY_PATH与PKG_CONFIG_PATH,这两个环境变量应放在它自己的脚本中设置,否则可能会影响其他的程序。
2.MonoDevelop对库有很多要求,通过bin安装不能解决包依赖的问题,比如gtksourceview要求2.0版本,如果版本过低,启动时会发生异常(这点许多使用早期版本linux的用户需要注意);libz库还可能也与本身已安装的库冲突。在独立安装时一定要注意这些问题。
上次由 icefireelf 在 2007-12-23 13:20,总共编辑 2 次。
mafa
帖子: 5
注册时间: 2005-07-24 0:30

#2

帖子 mafa » 2007-12-21 18:15

好贴要顶。
我以前在linux运行MonoDevelop,也是有问题,这次再试试
xinye0123
帖子: 61
注册时间: 2006-01-10 13:36

#3

帖子 xinye0123 » 2008-01-01 22:06

勇敢的人那,我还是等等吧
sfissw
帖子: 354
注册时间: 2007-06-21 1:30
来自: Shanghai
联系:

#4

帖子 sfissw » 2008-01-22 8:39

我在网上直接找的deb包装的mono1.2.6和MonoDevelop 0.18 beta3
谁说官方没提供deb?
deb是有提供
但是是提供的软件源
sfissw
帖子: 354
注册时间: 2007-06-21 1:30
来自: Shanghai
联系:

#5

帖子 sfissw » 2008-01-22 8:46

目前的最新版本mono1.2.6 MonoDevelop 0.18 beta3
开发起来已经可以输入中文和显示中文了
并且我试了把vs一段很简单的事例代码拷贝的MonoDevelop 0.18 beta3里运行后能在linux和windows里都直接运行
并且在windows里不需要mono环境也运行起来了 直接双击的exe
不过在win里比linux多起了一个cmd窗口后才跳出gui
回复