【问题标题】:Does a statically linked libcurl still use dynamically linked libraries?静态链接的 libcurl 是否仍然使用动态链接的库?
【发布时间】:2021-01-19 19:14:58
【问题描述】:

*免责声明:我是一个正在尝试学习如何使用第三方库的新手。 *

我正在考虑将 libcurl 用于一个项目,我想将它静态链接到我的项目,以便它包含在我的最终可执行文件中。

一些在线文档说:

默认情况下,configure 将设置构建文件,以便以下 make file 命令将创建 libcurl 的共享版本和静态版本。您可以使用要配置的 —disable-static—disabled-shared 选项来更改它。

如果您想使用第三方库的静态版本而不是共享库进行构建,您需要为一场艰苦的战斗做好准备......

他们是在谈论 libcurl 使用的库吗?我想我要问的是:即使我构建 libcurl 并静态链接,libcurl 仍然会动态链接到 3rd 方库吗?

这是在说什么吗?

【问题讨论】:

  • 你绝对可以静态链接libcurl,如果这就是你的要求。
  • 但是如果 libcurl 依赖于动态库,静态链接有什么好处呢?我想我错过了什么。
  • 它不依赖于动态库,它是一段代码,您可以根据需要在可执行文件中静态链接。
  • 感谢您的回复。如果它确实包含动态链接代码怎么办?或者这样的图书馆没有意义?

标签: c++ libcurl static-linking dynamic-linking


【解决方案1】:

问题是,静态库实际上只不过是目标文件的存档。与静态库链接与与单独的目标文件本身链接相同。这意味着该库具有的任何 3rd 方依赖项也将成为您的应用程序的依赖项。当您链接您的应用程序时,您必须链接那些第 3 方库和依赖项。

现在对于 libcurl 本身,根据您配置和构建 libcurl 的方式,它可能依赖于一些无法静态链接到您的应用程序的第三方库。

所以回答你的问题:这取决于。

这主要取决于您如何配置它以进行构建,以及您告诉它使用哪些 3rd 方库,以及这些 3rd 方库是否可用作静态库(然后是 它们的 依赖项等等)。

【讨论】:

  • 哦,伙计....所以也许我不理解动态链接。我只是有更多的问题。看起来几乎就像你为什么想要动态链接任何东西一样。这不就像打赌运行程序的人会在某个地方安装那个库吗?也许这是一个愚蠢的问题。我觉得我找不到任何能传达给我的解释。
  • 您可以使用ldd 来查看您编译的代码所依赖的动态库。 man7.org/linux/man-pages/man1/ldd.1.html。另见lddtreecodeyarns.com/tech/…
  • @pocketonion “动态链接”到库如果您记得此类库也称为 共享​​> 库,则很有用。这意味着使用该库的每个程序共享​​>该库的单个实例。如果您静态链接,那么所有程序都将拥有自己的库副本,这会浪费大量空间(无论是在磁盘上还是在内存中)。
猜你喜欢
  • 2011-11-08
  • 1970-01-01
  • 2020-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多