从源安装。如何在不破坏软件包管理器的情况下解决依赖关系


19

编译和安装软件是我无法克服的痛苦和问题。我只想与更多知识渊博的人深入了解此过程,以清除自己的想法,进入下一个层次。

我需要的许多科学软件都没有作为软件包分发。我知道“ ./configure”会设置编译变量,并检查依赖项“ make”是否会在编译“ sudo make install”时将所有库和bin放在它们的位置。但是,它永远都行不通。我很少离开a)“ ./configure”阶段而不进入依赖地狱,并且如果这样做,b)“ sudo make install”可能会破坏我的盒子。

a)依赖地狱非常令人沮丧。有时我有图书馆,但它不喜欢它。或库不想安装。或“配置”找不到它。或者我的发行版将其放置在不应放置的位置。或者我的系统中有两个版本。问题是,我不明白如何诊断并解决这些问题。对于不需要成为程序员的人,有哪些好的学习参考?

b)我的理解是“ make install”将替换一些库并更改设置,而我的软件包管理器没有意识到这一点。因此,某些程序将无法运行,其他程序将无法更新。因此,如果我不使用“ make install”,而只是将编译后的二进制文件保留在用户目录中,并在路径中添加了符号链接,我会很清楚吗?

我的机器是单用户的,具有大量的免费高清,所以我真的不关心拥有多个(几十个)库副本是否可以解决我的问题。空间便宜。


3
您没有说您正在使用哪个发行版,那将是一条有趣的信息。如果您运行Debian派生版,则可以apt-get build-dep <package>用来自动安装必要的依赖项。
马可(Marco)

我使用CentOS 6(以拥有我们实验室中的超级大师使用的东西),但是我曾经使用过Ubuntu。
Lenz 2012年

欢迎来到发行包装商的生活。进行所有这些依赖跟踪并不是特别困难,但是很麻烦。
吉尔斯(Gilles)'所以

请参阅非根目录程序包管理器,以及其他与软件安装和程序包管理有关的,标记为非超级用户的问题。
吉尔(Gilles)'所以

Answers:


16

大多数软件包将具有<package>-dev(对于基于Debian的)或<package>-devel(对于基于Red Hat的)作为链接所需要的库。

因此,例如,如果消息源说需要使用libxml,您将在基于Debian的系统中找到libxml2libxml2-devapt-cache search <dependancy>用来查找它们)。

您将需要libxml2-dev构建它并libxml2运行它。

./configure步骤通常支持--with-libxml=/usr/lib/将其指向正确库的标志(./configure --help应列出所有选项)。它还通常支持使用更改安装位置--prefix=$HOME/sw。在软件包管理器不能控制的范围之外使用前缀是避免与软件包管理器安装的软件发生冲突的最佳方法。

在Debian和衍生品使用--prefix/usr/local/还是/opt/local/应该是安全的。

如果软件包管理器中没有您需要的库(或版本),则只需下载源代码并使用类似的选项进行编译。最重要的是--prefix,请在软件包管理器外部使用,并在编译您真正想要使用的软件时使用--with-<library>=/<path/to/installed/library>


5

auto-apt可以用于此目的的工具。

man auto-apt

auto-apt是一个程序,用于检查在自动apt环境中运行的程序的文件访问权限。如果程序将访问未安装的软件包的文件,则自动apt将使用apt-get安装包含该文件的软件包。

它的用法如下:

auto-apt run ./configure

另一种方法是apt-get build-dep <package>在基于Debian的发行版上使用。


apt-get build-dep <package>为我工作。./configure一遍又一遍地学习一个必需的软件包真是令人沮丧!
HeatfanJohn

2

对于基于RPM的发行版,您可以尝试创建适当的软件包(不是 硬...)。

正确的软件包的好处是您的软件包管理器可以跟踪软件,并且可以轻松地将设置复制到其他位置或下一台计算机上。通过适当的源程序包向前移植(新的上游版本,错误修正补丁,底层库得到更新),比下次必须完全解决所有问题要容易得多。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.