.lib(静态库)是不是需要 .pdbs 或者 dll/exe pdbs 是不是足够?

Posted

技术标签:

【中文标题】.lib(静态库)是不是需要 .pdbs 或者 dll/exe pdbs 是不是足够?【英文标题】:Are .pdbs required for .lib (static libraries) or are the dll/exe pdbs enough?.lib(静态库)是否需要 .pdbs 或者 dll/exe pdbs 是否足够? 【发布时间】:2019-01-23 14:07:54 【问题描述】:

我大致知道,当从 .exe 静态链接到 .lib 时,代码被放置在 .exe 中(当然缺少一些细节)。

但是当从 WinDbg 之类的东西获取堆栈跟踪时,我是否需要为 exe 和 lib 提供一个 pdb,或者 exe 的 pdb 是否包含来自 pdb 的 lib 信息(以相同的方式exe包含lib)?

我问是因为在使用 MSVC 调试构建(使用 CMake)中,我为我的 .libs、.ddls、.exes 获取 pdb,但在发布时我只能为 .dlls 和 .exes 获取 pdb

【问题讨论】:

如果 lib 文件是静态链接的,那么您可能需要 PDB 文件。如果它们只是用于链接器和 DLL,那么它们就毫无意义并且永远不会生成,这些 LIB 只是 ar 存档,存储所有导出的函数名称。 EXE 就足够了,静态库的 pdb 条目被合并到其中。只要您不使用 /DEBUG:FASTLINK 链接器选项。 【参考方案1】:

检查this 答案。有编译选项。

如果您使用 /ZI 或 /Zi(C/C++ -> 常规 -> 调试信息格式),则会创建 vc$(PlatformToolsetVersion).pdb,其中包含所有创建的 .obj 文件的调试信息.如果交替使用 /Z7,调试信息将嵌入到 .obj 文件中,然后嵌入到 .lib 中。这可能是为静态库分发调试信息的最简单方法。

【讨论】:

以上是关于.lib(静态库)是不是需要 .pdbs 或者 dll/exe pdbs 是不是足够?的主要内容,如果未能解决你的问题,请参考以下文章

静态库 动态库 调用

V8引擎静态库及其调用方法

确定 Windows 上静态库 (LIB) 的 CPU 架构

Windows下使用静态库和动态库

构建 .NET 包装器是不是需要源代码?

QT creator 如何调用VC写的静态库