visual-c++ - 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.pdb
。x64\Debug
应该注意的是,如果我编译 FLTK 附带的所有其他示例应用程序,它们也会给出 PDB 链接警告,但仅在 x64 下。
我将所有 .lib 复制到一个单独的文件夹中,以用于我的 C++ 项目,该项目使用 Waf 构建系统。为了构建项目,我使用了编译标志:
/MDd /EHsc /ZI /FS
对于链接:
/DEBUG:FASTLINK
/MACHINE:X64
lib 路径(由 Waf 在配置时发现)也被传递,并且 .pdb 文件与 .lib 文件存在于同一目录中。
解决方案
推荐阅读
- spring-security - Spring Security 5.3.2 - 如何将 oauth2-login 添加到现有的安全配置中?
- glm - GLM 是否具有与 Hadamard/Schur 产品等效的产品
- android - 在解锁的智能手机上安装旧的(不支持的)Android 版本
- python - 如果使用 func() 有多个输出,我如何获取函数输出的长度?
- deeplink - 如何通过 MS 团队中的深度链接发送消息?
- nginx - 如何在生产环境中运行的 Nginx 上安装 Geoip2 模块?
- java - 等效插座。听在 python 中,在 java 中有什么?
- mysql - java.sql.SQLIntegrityConstraintViolationException:列“question_id”不能为空
- c++ - Protobuf ShortDebugString() 崩溃
- java - 如何将咖啡因缓存设置为不过期