编译和安装软件是我无法克服的痛苦和问题。我只是想和更多知识渊博的人一起了解一下这个过程,以清除自己的想法,进入一个新的水平。
我需要的许多科学软件都没有作为软件包分发。我知道“ ./configure”会设置编译变量,并检查依赖项“ make”是否会在编译“ sudo make install”时将所有库和bin放在它们的位置。但是,它永远都行不通。我很少离开a)“ ./configure”阶段而不进入依赖地狱,如果我这样做,则b)“ sudo make install”可能会破坏我的框。
a)依赖地狱非常令人沮丧。有时我有图书馆,但它不喜欢它。或库不想安装。或“配置”找不到它。或者我的发行版将其放置在不应放置的位置。或者我的系统中有两个版本。问题是,我无法理解如何诊断并解决这些问题。对于不需要成为程序员的人来说,有哪些好的学习参考?
b)我的理解是“ make install”将替换一些库并更改设置,而我的软件包管理器没有意识到这一点。因此,某些程序将无法运行,其他程序将无法更新。因此,如果我不使用“ make install”,而只是将编译后的二进制文件保留在用户目录中,并在路径中添加了符号链接,我会很清楚吗?
我的机器只有一个用户,有大量的免费高清,所以我真的不在乎是否有多个(几十个)库副本,如果能解决我的问题。空间便宜。
大多数软件包将具有<package>-dev
(对于基于Debian的)或<package>-devel
(对于基于Red Hat的),这是链接进行构建所需的库。
因此,例如,如果消息源说需要使用libxml
,您将在基于Debian的系统中找到libxml2
和libxml2-dev
(用于apt-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>
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句