首页 > 解决方案 > 静态和共享库及其交叉链接

问题描述

在阅读了很多帖子之后,我仍然对共享库和静态库以及它们如何交叉链接的方式感到困惑。

所以我的理解是,当我有一个链接到静态库的可执行文件时,可执行文件会将其所需的函数/资源的全部内容复制到自身中,因此当它运行时,它不再需要静态库。如果可执行文件链接到共享库,那么它只会为它需要的所有内容创建占位符,所以当它运行时,它需要路径中的共享库,因此它可以将内容加载到占位符。

如果上面的说法是正确的,那么下面的说法是否正确?

  1. A当我构建一个链接到共享库的静态库,B然后构建一个可执行文件C链接到A最初来自B. 结果,当我运行时C,我不会A被呈现,因为所有需要的内容都已经在C,但B仍然需要。
  2. A当我构建一个链接到静态库的共享库,B然后构建一个C链接到A最初来自B. 结果,当我运行时C,我只需要A但不是B因为所需的所有内容都已经在A.

标签: c++clinkage

解决方案


当我有一个链接到静态库的可执行文件时,可执行文件会将其所需的函数/资源的全部内容复制到自身中,因此当它运行时,它不再需要静态库

正确的。

如果可执行文件链接到共享库,那么它只会为它需要的所有内容创建占位符,所以当它运行时,它需要路径中的共享库

当然,它需要访问共享库。找到共享库的规则因平台而异。

当我构建一个链接到共享库 B 的静态库 A,然后为最初来自 B 的函数构建一个链接到 A 的可执行 C 时。结果,当我运行 C 时,我不会显示 A因为所有需要的内容都已经在 C 中,但仍然需要 B。

正确的

当我构建一个链接到静态库 B 的共享库 A,然后为最初来自 B 的函数构建一个链接到 A 的可执行 C。结果,当我运行 C 时,我只需要 A 而不是 B所有需要的内容都已经在A中

正确的

本质上,当您链接到静态库时,您在运行时永远不需要它,而当您链接到共享库时,您需要它。


推荐阅读