MSVC:使用外部PDB文件链接静态库

时间:2019-03-26 12:47:36

标签: visual-c++ linker static-libraries pdb-files

我知道How to link using an external 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配置管理器从现有的(Win32)创建新的解决方案平台(x64),为x64构建了FLTK。 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

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

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

/MDd /EHsc /ZI /FS

并用于链接:

/DEBUG:FASTLINK
/MACHINE:X64

还传递了lib路径(在配置时由Waf发现),. pdb文件与.lib文件位于同一目录中。

0 个答案:

没有答案