升级最新版本尚未在分发存储库中的软件包

时间:2012-01-23 04:40:18

标签: linux ubuntu repository upgrade libpng

我需要将libpng从1.2版升级到1.5版。我需要这样做:libpng warning: Application built with libpng-1.2.26 but running with 1.5.2。我正在使用Lubuntu 11.10并且在Canonical存储库中,libnpg 1.5仍然没有发布,尽管在Debian上有测试包(http://packages.debian.org/search?keywords=libpng),起初它们适合我。我将Debian存储库添加到Synaptec并且我能够安装libpng15,但这些软件包不能替代libpng12,在编译一些源代码时,IDE使用libpng12而不是libpng15。

为了解决这个问题,我下载了libpng15 deb软件包,解压缩并更改了替换 Conflicts 提供标签的<使用 libpng15 文本控制文件。然后,我执行了修改后的deb,但我得到的只是GDebi错误和一般系统故障,因为(我认为)libpng12已卸载而没有替换,Lubuntu严重依赖它,这迫使我重新安装Lubuntu因为计算机没有不能在Linux中再次启动。是的,这个解决方案不是我想的最好的方式。

那么,有没有办法升级一个软件包并替换旧版本的旧版本,但它仍然不在分发库中?我找到了ubuntu repository for libpng和{{3 }}。虽然到目前为止还不是很明确。

4 个答案:

答案 0 :(得分:3)

我还没有找到如何升级和替换新版本尚未在分发存储库中的软件包。但我已经意识到,如果某个库X依赖于其他库Y的给定版本,除非你对X的源代码进行一些更改,否则无法更改该依赖的版本,也就是说,库X是重新编译以指向所需的版本(通常在某些配置标记的帮助下)。尽管可以通过修改库Y的符号链接以指向较新的版本来完成某些技巧。然后,编译器会抱怨并要求旧版本。

现在看起来很明显。但是,如果必须重新编译的软件需要很长时间,具有未解决的依赖性或产生错误,那么无论是否违反热力学定律,都会尽量避免编译。

所以在我的情况下我必须重新编译Qt并使用-system-libpng配置标签Qt理解它必须使用系统libpng库,而不是内置库。经过8个小时的编译,我得到了一个成功构建,解决了这个libpng问题。

感谢大家的评论和建议。

答案 1 :(得分:1)

对于您正在经历的所有麻烦,简单地从源代码编译可能更容易,并且安装到/usr/local(而不是/usr,就像deb一样)。我已经为我编译的程序(使用make build systems)的几个库依赖项做了这个,没有任何麻烦。但是,听起来您正在编译的程序在选择正确版本的软件包时遇到了问题。在我看来,这是真正的问题。支持同时安装多个版本的库,但在混合Debian和Ubuntu存储库的情况下可能不是apt。

编译程序时,请使用gcc -lpng15代替-lpng。根据gcc info手册,-lname选项会使链接器在lib文件夹中查找libname.a。在我的系统(Ubuntu 10.04)上,libpng.alibpng12.a的符号链接。这就是你的程序选择错误的库的原因。

答案 2 :(得分:0)

尝试添加此ppa:https://launchpad.net/~linaro-maintainers/+archive/overlay。它包含了Oneiric的libpng1.5。

您可以通过运行

来安装它
sudo add-apt-repository ppa:linaro-maintainers/overlay
sudo apt-get update
sudo apt-get install libpng1.5

答案 3 :(得分:0)

要正确链接libpng15,您还需要安装libpng15-dev