2

我需要将 libpng 从 1.2 版升级到 1.5 版。因为这个,我需要这样做:libpng 警告:应用程序构建使用 libpng-1.2.26 但运行 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 包,将其解压缩并使用libpng15文本更改了控制文件的ReplacesConflictsProvides标记。然后,我执行了修改后的 deb,但我只得到一个 GDebi 错误和一般系统故障,因为(我认为)libpng12 被卸载而没有替换并且 Lubuntu 严重依赖它,这迫使我重新安装 Lubuntu,因为计算机没有不能在 Linux 中再次启动。是的,这个解决方案不是我认为的最简洁的方式。

那么,有什么方法可以升级软件包并替换旧版本,其新版本存在但它仍然不在分发存储库中?我找到了 libpng 的 ubuntu 存储库以及如何在 linux 中升级从源代码构建的包?. 虽然到目前为止还不是很确定。

4

4 回答 4

3

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

也许这现在看起来很明显。但是,如果必须重新编译的软件需要很多小时,具有未解决的依赖关系或产生内置错误,那么无论您是否违反热力学定律,您都将尝试避免编译。

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

感谢大家的意见和建议。

于 2012-01-24T23:52:41.747 回答
1

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

编译程序时,请gcc -lpng15使用-lpng. 根据 gcc info 手册,选项-lname导致链接器libname.a在 lib 文件夹中查找。在我的系统(Ubuntu 10.04)上,libpng.a是一个指向libpng12.a. 这就是您的程序选择错误库的原因。

于 2012-01-23T05:11:28.543 回答
0

Try adding this ppa: https://launchpad.net/~linaro-maintainers/+archive/overlay. It contains libpng1.5 for Oneiric.

You can install it by running

sudo add-apt-repository ppa:linaro-maintainers/overlay
sudo apt-get update
sudo apt-get install libpng1.5
于 2012-01-23T06:44:01.067 回答
0

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

于 2012-01-23T07:09:11.737 回答