【问题标题】:Why .o (object file) links faster than .lib ( static library)?为什么 .o(目标文件)链接比 .lib(静态库)快?
【发布时间】:2018-06-07 05:12:37
【问题描述】:

在我的工作场所,我们的产品编译为可执行文件,子项目链接为静态库 (.lib) 或共享库(.dll)。我们使用 Microsoft C++ 编译器。

最近我的一位同事将一个子项目目标从 .lib(静态库)转换为 .o(目标文件),该子项目的链接时间急剧减少。早些时候,.lib 链接大约需要 1.5 分钟。通过链接到 .o,链接时间几乎是 5-6 秒。

为什么链接 .lib 比 .o 慢?

【问题讨论】:

  • 有趣的话题。我的猜测是,这是因为目标文件已经是链接器方便的格式,符合它所期望的结构。
  • 嗯,这不是明智之举,.obj 文件只能存储单个源代码文件的代码。链接器并不那么容易被愚弄,并且可能仍然将其识别为库。您可能所做的是搞砸了库的调试信息生成,即 .pdb 文件,这往往是链接的昂贵部分。有一天当你需要调试它时,应该会产生一个非常令人不快的惊喜。查看 /DEBUG:fastlink 选项,自 VS2015 更新 1 起可用。当然,将代码分离到单独的模块中,即 DLL,可以显着减少构建时间。

标签: c++ windows visual-studio-2010


【解决方案1】:

如果您所做的只是编译源代码以创建目标文件,那么您根本没有执行任何链接。这意味着对源代码中存在的外部函数和变量的任何引用都将不起作用,因为它们的地址尚未解析。

https://www.cprogramming.com/compilingandlinking.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    • 1970-01-01
    • 2013-04-25
    • 1970-01-01
    • 1970-01-01
    • 2013-04-03
    • 1970-01-01
    相关资源
    最近更新 更多