.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 是不是足够?的主要内容,如果未能解决你的问题,请参考以下文章