Linux 升级其最新版本不在分发存储库中的包

Linux 升级其最新版本不在分发存储库中的包,linux,ubuntu,repository,upgrade,libpng,Linux,Ubuntu,Repository,Upgrade,Libpng,我需要将libpng从1.2版升级到1.5版。我需要这样做是因为:。我使用的是Lubuntu11.10,在规范存储库中,libnpg1.5还没有发布,尽管DebianOnes有一些测试包(),起初它们适合我。我将Debian存储库添加到Synaptec中,并且我能够安装libpng15,但是这些软件包并不能取代libpng12,在编译一些源代码时,IDE使用libpng12而不是libpng15 为了解决这个问题,我下载了libpng15 deb包,对其进行解压缩,并更改了控制文件的替换、冲突和

我需要将libpng从1.2版升级到1.5版。我需要这样做是因为:。我使用的是Lubuntu11.10,在规范存储库中,libnpg1.5还没有发布,尽管DebianOnes有一些测试包(),起初它们适合我。我将Debian存储库添加到Synaptec中,并且我能够安装libpng15,但是这些软件包并不能取代libpng12,在编译一些源代码时,IDE使用libpng12而不是libpng15

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


因此,有没有办法升级软件包并替换旧版本,而新版本已经存在,但它仍不在分发存储库中?我找到并找到了。尽管到目前为止还不是很确定。

对于您正在经历的所有麻烦,只需从源代码编译并安装到
/usr/local
(而不是像debs那样安装到
/usr
)。我已经为我编译的程序(使用makebuildsystem)的几个库依赖项完成了这项工作,没有任何问题。但是,听起来您正在编译的程序在选择包的正确版本时遇到了问题。在我看来,这才是真正的问题。同时安装多个版本的库是受支持的,但在混合使用Debian和UbuntuRepos的情况下,apt可能不支持


编译程序时,请使用
gcc-lpng15
而不是
-lpng
。根据gcc信息手册,
-lname
选项会导致链接器在lib文件夹中查找
libname.a
。在我的系统(Ubuntu 10.04)上,
libpng.a
是指向
libpng12.a
的符号链接。这就是为什么您的程序选择了错误的库。

对于您正在经历的所有麻烦,只需从源代码编译并安装到
/usr/local
(而不是像debs那样安装到
/usr
)。我已经为我编译的程序(使用makebuildsystem)的几个库依赖项完成了这项工作,没有任何问题。但是,听起来您正在编译的程序在选择包的正确版本时遇到了问题。在我看来,这才是真正的问题。同时安装多个版本的库是受支持的,但在混合使用Debian和UbuntuRepos的情况下,apt可能不支持

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

尝试添加此ppa:。它包含Oneiric的libpng1.5

您可以通过运行

sudo add-apt-repository ppa:linaro-maintainers/overlay
sudo apt-get update
sudo apt-get install libpng1.5
尝试添加此ppa:。它包含Oneiric的libpng1.5

您可以通过运行

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

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

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

也许这看起来很明显。但是,如果需要重新编译的软件需要很多小时,有未解决的依赖项,或者给出了构建错误,那么无论您是否违反热力学定律,您都会尝试避免编译

所以在我的例子中,我必须重新编译Qt,通过使用-system libpng配置标记,Qt明白它必须使用系统libpng库,而不是内置库。经过8个小时的编译,我成功地构建了一个解决这个libpng问题的程序


谢谢大家的评论和建议。

我还不知道如何升级和替换一个新版本不在发行库中的软件包。但我已经意识到,如果某个库X依赖于另一个库Y的给定版本,则无法更改该依赖的版本,除非您对X的源代码进行一些更改,也就是说,库X被重新编译以指向所需的版本(通常借助于一些配置标记)。尽管有些技巧可以通过修改库Y的符号链接来指向新版本来实现。然后,编译器将抱怨并要求使用旧版本

也许这看起来很明显。但是,如果需要重新编译的软件需要很多小时,有未解决的依赖项,或者给出了构建错误,那么无论您是否违反热力学定律,您都会尝试避免编译

所以在我的例子中,我必须重新编译Qt,通过使用-system libpng配置标记,Qt明白它必须使用系统libpng库,而不是内置库。经过8个小时的编译,我得到了一个成功构建的w