Ubuntu Linux下安装库和头文件进行C/C++开发

Len*_*mel 8 linux dependencies c c++ libraries

我不得不承认,每次我必须满足某些 C 或 C++ 代码的依赖关系时,我都感到完全迷失了。目前,我使用的是Ubuntu 9.10(Karmic Koala),但我还记得 Windows 中同样的凄凉感觉。

我真的认为我确实了解 C、C++、静态和动态库、头文件和链接,以及数据包管理器的“能力”,但是说到实践部分,我完全不知道该怎么做。即使我以某种方式管理它,我也不知道我是如何到达那里的,也没有从中学到任何东西。

例如,今天我想使用声明“它使用 glib2、curl 和 openssl”的代码。最后,我想通了curl并且openssl已经安装了,但是我需要libcurl3-dev通过我的数据包管理器进行安装,这也需要(并安装),libcurl4-openssl-dev这样我就不必担心 OpenSSL。但我不得不从 67 个听起来相似的替代方案中选择这些数据包名称。并且glib,另一方面,由于根本没有匹配的数据包,因此必须手动下载和构建。

我花了几个小时才发现这一点,这不是第一次。所以我的问题是:

当我对依赖项有一个模糊的描述时:

  • 我如何找出哪些已经安装?
  • 我如何确定哪些可以通过安装软件包来实现?
  • 我怎么知道这些包的确切名称?
  • 如果一个包必须从源代码构建,我如何确保我不会迷失在这个源代码的无休止的依赖中,以及那些依赖的依赖中......?
  • 我想我还需要将库与我的目标文件链接起来。如果单个数据包带有多个静态库文件,我怎么知道(无需反复试验)要链接哪个?

Soa*_*Box 4

弄清楚要安装哪些包来满足依赖关系并不是一门精确的科学。但有一些提示可能会对您有所帮助:

  • 当您使用令人满意的依赖项来编译某些内容时,您几乎总是希望以-dev. 这是开发的简称。例如,该openssl软件包包含用于加密的命令行工具和库。 libssl-dev包含用于 openssl 开发的头文件和库。
  • 要使用 apt 按关键字搜索包,请使用apt-cache search。例如,我实际上并不知道 libssl-dev 是 openssl dev 包的名称。我发现使用这个命令:apt-cache search openssl | grep dev然后使用似乎与另一种语言/库无关的命令。
  • 你可以使用 来查看你安装了哪些软件包dpkg -l,但是,一般来说,只需找到你想要的软件包并告诉 apt 安装它,如果你已经安装了它,那么 apt 会告诉你。另一个好提示是,如果您想知道哪个包拥有某个文件,请使用dpkg -S /path/to/thefile
  • 如果您最终需要从源代码构建包,则没有简单的方法来解析依赖关系树。 ./configure应该告诉你,或者README文件。通常他们甚至会说出所需的确切包的名称。
  • 为了弄清楚要链接的内容,通常与包的名称或您想要的内容的最通用名称相关。对于我们的 libssl 示例,您只需传递-lssl给 gcc。如果您不知道选项是什么-l,请查看 /lib/ (只需删除前面的“lib”和后面的“.so...”即可获得传递的“中间”海湾合作委员会)。

  • http://packages.debian.org 上的包内容搜索功能也是一个很好的资源。 (2认同)
  • 添加一些有关“apt-file search foo.h”的信息... http://debianhelp.de/apt-file.html,否则你的答案已经非常完整 (2认同)