【发布时间】: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