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

19 make software-installation

编译和安装软件是我无法克服的痛苦和问题。我只是想通过我对这个过程的理解,与知识渊博的人一起来清理我的思想,以进入下一个层次。

我需要的许多科学软件都不是作为包分发的。我知道“./configure”设置编译变量并检查依赖项“make”是否编译“sudo make install”将所有库和bins放在它们的位置。然而,它永远不会奏效。我很少在不进入依赖关系的情况下退出 a) “./configure” 阶段,如果我这样做,b) “sudo make install”可能会毁了我的盒子。

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

b) 我的理解是“make install”将替换一些库并更改设置,而我的包管理器不知道这一点。因此,有些程序无法运行,有些程序无法更新。所以,如果我不使用“make install”,而只是将编译后的二进制文件保存在我的用户目录中,并在 PATH 中添加一个符号链接,我会清楚吗?

我的盒子是单用户,有大量的免费高清,所以如果能解决我的问题,我真的不在乎拥有多个(几十个)库副本。空间便宜。

bah*_*mat 16

大多数软件包都会有一个<package>-dev(对于基于 Debian 的)或<package>-devel(对于基于 Red Hat 的)这将是链接以进行构建所需的库。

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

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

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

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

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