![在 Linux 上构建/安装具有外部依赖关系的软件](https://linux22.com/image/1398680/%E5%9C%A8%20Linux%20%E4%B8%8A%E6%9E%84%E5%BB%BA%2F%E5%AE%89%E8%A3%85%E5%85%B7%E6%9C%89%E5%A4%96%E9%83%A8%E4%BE%9D%E8%B5%96%E5%85%B3%E7%B3%BB%E7%9A%84%E8%BD%AF%E4%BB%B6.png)
这种事情经常发生在我身上。通常,当我构建某个程序的源代码,甚至只是安装一个具有我的机器上尚未安装的外部依赖项的程序时,我最终不得不进行无数次 Google 搜索,以找到我实际上缺少的库。
最近的一个例子是 MathGL,当我第一次尝试安装它时,它说缺少一些依赖项,但没有明确提到我需要apt-get install libmgl-dev
。这只是常识吗?我libmgl-dev
在他们的 README 或 INSTALL 文件或网站上都没有看到提及。我甚至在整个目录中进行了 grep 查找提及libmgl-dev
,但一无所获。经过大量的 Google 搜索,我设法在我查看的一些论坛帖子中找到它,说它是必需的。
我的方法肯定有问题。安装任何东西时,有没有一种标准方法可以确定我首先需要哪些依赖项?非常感谢!
答案1
如果编程团队很棒和/或专业运行 。/配置会告诉你缺少了什么,遗憾的是这种编程是例外,而不是规则。
当运行 make a 时(我忘记了确切的错误信息),将显示某种类型的缺失错误消息。
查找依赖项取决于所讨论的语言。也许其他人有更好的方法,但我是这样做的。在C编程语言有包括 <文件名.h>指示头文件的语句。如果您在当前文件夹中搜索头文件但找不到它,则它可能是另一个库的一部分。根据发行版的不同,标准头文件位于不同的位置。在 OpenSuSE/usr/include包含所有有该程序的头文件-dev已经安装。如果这两个地方都没有,则您很可能缺少需要安装的库。
在 perl 中,它是使用某物::子功能;这表明它正在调用外部模块/库。
php 有包括,包含一次,要求, 和需要一次指 标。
其他语言有不同的方法。
答案2
大多数软件都会包含其所需依赖项的列表,尽管该列表可能不一定是以最方便您查找和安装它们的形式。
举一个任意的例子,假设你想编译电子表格应用程序 Gnumeric。你下载源代码,并查看文件 README,其中有一个部分
Requirements
------------
You need: Debian package name
glib >= 2.28.0 libglib2.0-dev
gtk+ >= 3.2.0 libgtk3.0-dev
libgsf >= 1.14.24 libgsf-1-dev
libgoffice >= 0.10.1 libgoffice-0-8-dev
gnome-xml >= 2.4.12 libxml2-dev
pango >= 1.24.0 libpango1.0-dev
NOTE: gnome-xml is also known as libxml
Optionally:
python >= 2.0 python-dev
pygobject >= 3.0.0 python-gi-dev
The GDA plugin, for accessing databases
gda >= 1.3.0 libgda2-dev
libgnomedb >= 1.3.0 libgnomedb2-dev
Currently disabled:
guile >= 1.5 (no maintainer)
Runtime suggestions:
'yelp' for help
现在这是最好的情况,他们会告诉你所需的库,并告诉你需要安装的确切 Debian 包。例如,你只需运行
$sudo apt-get install libglib2.0-dev
安装第一个依赖项。
但是,大多数软件包中“debian 软件包名称”的第二列并不常见。相反,它们的第一列只有“glib”,可能还有版本号。您需要将命名的依赖项“glib”与 debian(或 ubuntu 等)软件包名称“libglib2.0-dev”进行核实。通常,一些网络或论坛搜索会帮助您找到软件包名称。
有了一定的经验,您会注意到所需软件包的名称中存在一些模式。通常,库以名称 libXXXX 打包,并且通常分为运行时组件 (libXXX) 和编译程序所需的开发文件 (libXXX-dev)。除此之外,如果您无法通过简单的网络搜索找到正确的软件包,请查看尝试编译时收到的具体错误消息。例如,如果缺少文件“glib.h”,您可以使用发行版的软件包搜索来查找包含该文件的软件包,或者更一般地,您可以始终在网上搜索这些错误消息以查找遇到相同问题的其他人。
软件包会给出多少所需依赖项的信息,这实际上取决于软件包,但最常见的方法是列出所需库的通用名称。然后,编译软件包的人负责弄清楚如何在其特定系统配置上安装该库的开发文件。
如果您发现没有以任何方式列出它的依赖关系,然后提交错误报告,同时准备开始艰难地处理一些错误消息。