linux依赖关系及软件编译更新
linux各种软件相互依赖,如一张网一般,如果需要更新其中一个软件,rpm的好像可以解决软件间的相互依赖关系;如果自己编译更新软件(很多软件没有rpm格式的),用tar更...
linux各种软件相互依赖,如一张网一般,如果需要更新其中一个软件,rpm的好像可以解决软件间的相互依赖关系;如果自己编译更新软件(很多软件没有rpm格式的),用tar更新,如何解决相互依赖关系? 卸载旧版软件,如何将软件间依赖关系更新到新装软件? 我发现我编译更新软件之后,其他软件仍然依赖旧版软件,如果卸载旧软件就会影响其他软件的依赖关系,系统软件网就会有一个大破洞,很多软件都不能再用,严重的只能重装系统。
展开
展开全部
脑补……
因为你没有软件,所有这些事情都要自己动手。
ldd 可以读取每个可以运行的程序依赖的 so 文件。
objdump 好像也可以读取依赖的一些内容。
之后用读取的这些内容反推程序对应的软件包,之后把这些反推出来的软件包都重新编译。
一般来说 ldd 对应的 so 文件只要正确,一般函数接口就问题不大,当然并不绝对。
所以,这种情况,最好的解决办法是把所有系统都整体的重新编译一遍。
言外之意,用 tar 源代码升级系统基本函数库是一个典型的找抽行为。
看看 gentoo 的 gentoolkit 吧。这个东西有个 revdep-rebuild 命令他就是检测函数库依赖关系并且反推软件包重新编译的。
因为你没有软件,所有这些事情都要自己动手。
ldd 可以读取每个可以运行的程序依赖的 so 文件。
objdump 好像也可以读取依赖的一些内容。
之后用读取的这些内容反推程序对应的软件包,之后把这些反推出来的软件包都重新编译。
一般来说 ldd 对应的 so 文件只要正确,一般函数接口就问题不大,当然并不绝对。
所以,这种情况,最好的解决办法是把所有系统都整体的重新编译一遍。
言外之意,用 tar 源代码升级系统基本函数库是一个典型的找抽行为。
看看 gentoo 的 gentoolkit 吧。这个东西有个 revdep-rebuild 命令他就是检测函数库依赖关系并且反推软件包重新编译的。
追问
rpm的好像可以解决软件间的相互依赖关系,他是怎么解决的,还是他也不能解决
追答
他一样是检测每个二进制文件,检索出来依赖的 so 文件。之后把这个文件存到自己的数据库里面。而且 rpm 包的配置文件还可以添加附加的一些依赖数据,比如需要某个程序运行,需要某个设置等等。
你更新时,如果新函数库的 so 变了,导致和数据库里面存放的不符,那么 rpm 就禁止你升级,或者要求连带被依赖的程序一起升级。
Linux 现在系统的动态链接库接口相关数据信息是可以用软件做扫描实现统计的。
rpm 在生成 rpm 包的时候就已经提取了相关的文件信息,在安装软件包的时候这些数据都会转存到 rpm 的数据库里面,现在 rpm 还有附加数据库,还可以存放没有安装的软件包的相关数据。
有了这些数据,软件包相互的依赖关系用依赖关系算法做计算就能知道了。
依赖关系里面,还有很大的方面是要靠人工整理的。rpm 也仅仅是辅助,相对他的自动 so 依赖扫描还是能减少不少工作量的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询