【问题标题】:why the building a .so file involves multiple .c files为什么构建 .so 文件涉及多个 .c 文件
【发布时间】:2013-04-09 17:27:25
【问题描述】:

我认为.so 文件就像.o 文件。而且由于.o 文件是直接从单个.c 文件构建的,我很困惑为什么.so 文件涉及到多个.c 文件的链接。

【问题讨论】:

标签: c shared-libraries


【解决方案1】:

.so 文件是一个库——它是编译和链接一堆代码的最终结果。它可以由 1 个 .c 文件或多个 .c 文件组成。这完全取决于您希望如何组织代码。 .o 文件是目标文件。它是编译而不是链接单个文件的结果。链接器使用它与其他 .o 文件组合成可执行文件(.exe 或等效文件)或库(.so、.dll 等)。

【讨论】:

    【解决方案2】:

    我认为 .so 文件就像一个 .o 文件。

    不,不是。 .o 文件是 object code(这就是编译 .c 源文件的结果),而 .so 文件是 dynamically linked libraries。它们与可执行文件相似,因为它们可能由多个链接在一起的目标文件构建。

    这样做的原因是,由于动态库与目标文件的用途不同(即,以可动态解析的方式提供对函数和其他符号的访问),它们需要包含适当的可执行代码,并且没有依赖关系.就像普通的独立可执行文件一样。目标文件包含具有未解决的依赖关系的代码,它不能直接执行等。这就是为什么在几个目标文件上执行linkage,以解决依赖关系并制作最终文件(称为“可执行文件”,即使它不是一个立场- 单独的可执行文件,但动态库、内核模块等)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-02
      • 2017-03-30
      • 1970-01-01
      • 2013-01-30
      • 2020-05-10
      • 1970-01-01
      相关资源
      最近更新 更多