【发布时间】:2014-06-24 13:12:29
【问题描述】:
我想知道,在用 C 编写的程序中,静态库中的函数代码是否会在可执行文件中包含两次。
例如,假设您创建了一个静态库 lib_a,它使用来自另一个静态库 lib_b 的函数。然后创建一个同时使用 lib_a 和 lib_b 的程序。该程序的可执行文件是否会包含两次来自 lib_b 的函数的代码?如果没有,如何避免?
我对链接器和可执行文件格式的理解非常粗略;对不起,如果这个问题很基本。也许有人知道这个主题的好参考?我已经搜索了几本关于 C 的书籍,但我找不到答案。
【问题讨论】:
-
@Yann 你确定吗?使用全局变量,不能将多个定义链接在一起。使用全局函数可以吗?
-
我仍在等待专家级程序员,但同时让我检查一下我的理解。创建使用来自 lib_a 的函数的静态库 lib_b 并不意味着将来自 lib_a 的代码包含在 lib_b 中。 lib_b 将对 lib_a 中的函数具有“未解析的引用”(创建 lib_b 时甚至不必存在 lib_a)。事实上,在典型的 unix 环境中,生成一个解决了所有依赖关系的库至少是不寻常且困难的,因为该步骤通常在链接可执行文件时完成。
标签: c linker executable