【发布时间】:2016-10-21 15:55:12
【问题描述】:
参考this answer:
有两种 Linux C/C++ 库类型。
静态库 (
*.a) 是与应用程序链接并成为应用程序一部分的目标代码档案。它们被创建 并且可以使用ar(1)命令进行操作(即ar -t libfoo.a将列出库/存档中的文件)。动态链接的共享对象库 (
*.so) 有两种使用方式。
- 共享对象库可以在运行时动态链接,但静态感知。库必须在期间可用 编译/链接阶段。共享对象不包含在 二进制可执行文件,但与执行相关。
- 可以在执行期间使用动态链接加载器系统动态加载/卸载和链接共享对象库 功能。
制作动态库tied to the execution是什么意思?
这是否像 Windows manifest files 那样允许应用程序加载到特定的 dll 中?
控制 .so 加载的机制是什么?
必须有这样的机制,否则“已编译”的 .so 是唯一允许加载的机制,这违背了使其动态的目的?
【问题讨论】:
-
在 Windows 中,一个可能更容易理解的等价物是 import library,它是从模块定义文件或 dll 生成的,并链接到任何想要拉入模块的模块问题。
-
@WhozCraig 你能推荐一个网站,用图表解释 Linux 应用程序如何加载和使用 .so 文件吗?