LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 981|回复: 3

请教: fedora8软件依赖性与Windows的dll

[复制链接]
发表于 2008-1-19 14:45:15 | 显示全部楼层 |阅读模式
接触fedora8以来,当然安装了一部分常用软件,对于普通人来说,用电脑就是用软件,当然操作系统也是一种软件。我还不太会./config 、make、nake install之类的东西,对起参数没有认识全面,经常失败。所以我一般采用和大所数用户同样的yum安装或者rpm安装的方式。Rpm是在背后为你解决了软件包、基本库的依赖问题。但是在我看来,这目前存在着问题。
  在安装chmsee的时候,碰到了libgtkembedmoz.so问题,上网搜索,大家提出了很多中方法,我没有一一实验,目前还没有搞定。我在安装monodevelop的过程中,也因为软件包的依赖而没有成功。安装不成功本身不是问题,但是在安装过程中遇到的这些问题却让我有了一点想法。
  chmsee依赖性是因为它使用了firefox的一个库文件,firefox升级后,文件位置发生了变化,chmsee不能找到了。其他软件出现依赖性问题大多是库的版本问题。但是,现在,如果不同版本的软件,需要对同一个库的不同版本发生调用的情况下,如果更新了一个,那么另外一个会不会出现问题呢??
  在windows下面,有这臭名昭著的”dll hell”问题,dll相当于linux下面的各种库。不同软件对不同公共dll的调用、升级等引发了版本冲突,软件之间通过dll发生了耦合,使得更新软件A 是,连带产生了更新Dll 1,从而影响了软件B。
  Linux(我的是fedora8)的软件依赖性问题是不是和这个类似呢?
  由于dll hell的存在,也是微软全力推出net大旗的一个不可忽视的原因。微软推出.Net时,在这方面的宣传也是很大力的。
  Linux下的mono项目,在mono基础上的monodevelop都是为了.NET(.Net和C#已经不是微软独有,已经成了标准)而产生的,这样在mono下开发出的软件当然也能解决软件包依赖性问题。但是,monodevelop和mono之间的这种不同版本的依赖问题,又怎么来解决呢?
  也许通过自己编译的方式可以指定库文件的位置,我们自己可以手动区分这些不同的库。但是这样是不是太麻烦了,对个人普通用户来说也是有一定困难的,Linux占领个人用户市场也会因此而产生不必要的阻力吧。
-----------------------------------------------------
不知道这个软件依赖性背后机制是什么样的,希望大家给点意见,说说自己的看法。
发表于 2008-1-19 20:43:01 | 显示全部楼层
一般不会出现你说的那种“dll hell”问题。因为 Linux 的共享库文件是以版本号来区别的,譬如 libglademm-2.4.so.1.0.5,但是同时有一个链接指向它,那就是 libglademm-2.4.so。可以认为 libglademm-2.4 是主版本号,对于 2.4 版本的 libglademm 库无论怎么升级,这个主版本号是不变的,总是指向最新的 libglademm 版本。当 libglademm 库的主版本升级时,那也意味着依赖它的那些程序也要进行大变动,但是这种变动通常都是协同进行的,很少出现版本依赖的问题。

不知道这样解释你能不能明白。
回复 支持 反对

使用道具 举报

发表于 2008-1-26 01:59:37 | 显示全部楼层
楼上说的很明白了,所有的库文件都有一个类似 libstdc++.so.5的链接文件,指向相同主版本号的真实库文件libstdc++.so.5.0.7

当次版本号变化的时候,实际上只改变了真实的库文件,连接文件其实名字并没有改变,只是指向了新的真实库文件而已

另外,即使主版本号升级了,也没什么关系,linux的库里面可以存在同一个库的多个不同版本,比如

libstdc++.so.5 -> libstdc++.so.5.0.7
libstdc++.so.6 -> libstdc++.so.6.0.8
回复 支持 反对

使用道具 举报

发表于 2008-1-26 08:43:45 | 显示全部楼层
链接文件确实一个很不错的特性,
解决了很多问题。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表