首页 > 解决方案 > MSVC:使用外部 PDB 文件链接静态库

问题描述

我知道如何使用外部 pdb 进行链接?,但这个问题的公认答案并没有真正给我任何有用的信息。

我已将 FLTK 预编译为一组静态.lib库文件,以便我的存储库中的任意数量的项目都可以使用它。我目前正在尝试在命令行上使用 MSVC 编译器在为 Windows 编译的项目中使用它(因此无需调整 Visual Studio 项目设置)。

该项目编译并运行良好,但我想摆脱链接时发出的警告:

fltkd.lib(scandir.obj) : warning LNK4099: PDB 'fltk.pdb' was not found with 'fltkd.lib(scandir.obj)' or at 'C:\my_executable_path\fltk.pdb'; linking object as if no debug info

基本上,我想做的就是将链接器指向所在的文件夹fltk.pdb。我目前在同一个文件夹中拥有它,fltk.lib并假设链接器在获取库时会找到它,但事实并非如此。如果可能的话,我想避免将其复制.pdb到可执行文件的输出目录,因为它会使我的构建脚本更加复杂——我只想让编译工具处理build输出文件夹中的内容。

有什么方法可以提供链接器的路径吗?我已经尝试过该/PDBALTPATH选项,但没有奏效;我认为这可能用于创建原始 .pdb 而不是引用现有的。我还查看了详细链接,但这似乎只是向我发送了有关符号本身所在位置的消息,并且没有提供有关如何使用 .pdb 文件的任何信息。

编辑:有关更多信息,我正在使用 Visual Studio Community 2017(以及在适当情况下随附的命令行编译器工具)。我使用 Visual Studio 配置管理器为 x64 构建了 FLTK,以从现有平台 (Win32) 创建一个新的解决方案平台 (x64)。FLTK 的编译设置如下:

/FR"x64\Debug\" /GS /W1 /Zc:wchar_t /I"." /I"..\..\zlib" /I"..\..\png"
/I"..\..\jpeg" /I"../.." /Zi /Gm- /Od /Fd"x64\Debug\fltk.pdb" /Zc:inline
/fp:precise /D "_CRT_SECURE_NO_DEPRECATE" /D "FL_LIBRARY" /D "WIN32"
/D "_DEBUG" /D "_WINDOWS" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN"
/D "WIN32_EXTRA_LEAN" /D "_VC80_UPGRADE=0x0710" /errorReport:prompt
/WX- /Zc:forScope /Gd /MDd /FC /Fa"x64\Debug\" /EHsc /nologo
/Fo"x64\Debug\" /Fp"x64\Debug\fltkd.pch" /diagnostics:classic

链接设置为:

/OUT:"..\..\lib\fltkd.lib" /MACHINE:X64 /NOLOGO

这确实会为少数依赖项目(PNG、JPEG、ZLIB、fltkdlld)生成一个 inside 以及 .pdb 文件fltk.pdbx64\Debug应该注意的是,如果我编译 FLTK 附带的所有其他示例应用程序,它们也会给出 PDB 链接警告,但仅在 x64 下。

我将所有 .lib 复制到一个单独的文件夹中,以用于我的 C++ 项目,该项目使用 Waf 构建系统。为了构建项目,我使用了编译标志:

/MDd /EHsc /ZI /FS

对于链接:

/DEBUG:FASTLINK
/MACHINE:X64

lib 路径(由 Waf 在配置时发现)也被传递,并且 .pdb 文件与 .lib 文件存在于同一目录中。

标签: visual-c++linkerstatic-librariespdb-files

解决方案


推荐阅读