Visual Studio Linker Warning LNK4099

本文介绍如何在VisualStudio中解决链接debug版本程序时找不到pdb文件的问题。通过具体步骤展示了如何查找对应库中目标文件的pdb文件路径,并提供了解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Visual Studio 下链接debug 版本的程序的时候,要求被链接的目标文件对应的pdb存在,这就要求依赖库在发布debug版本的时候也一并把pdb 文件发布。 如果链接的时候找不到pdb文件就会有这个Warning 消息跳出来。 那么链接器是怎么知道链接到哪个pdb文件的呢? 参考MSDN上的这篇文章 . 可以知道链接的pdb文件名,但是需要注意的是,pdb文件名对于库里面的每个目标文件都是独立的, 也就是说一个lib里面所包含的每个.obj文件的关联pdb文件都可以不一样。当然一般情况下都是一样的。

按照下面的步骤我们来看看如果获取某个库(.lib)下面某个目标文件(.obj)对应的pdb文件名。假设我们现在链接到opencv_highgui310d.lib这个库,然后链接时候报出Warning,说这个库里面的window.obj的pdb文件找不到,我们该如何确定window.obj相关联的pdb文件呢?


  • 列出opencv_highgui310d.lib的目标成员

命令:
   lib /LIST opencv_highgui310d.lib

输出:
    opencv_highgui.dir\Debug\window.obj
    opencv_highgui.dir\Debug\window_w32.obj
    opencv_highgui.dir\Debug\opencv_highgui_pch.obj
  • 从opencv_highgui310d.lib中提取window.obj文件

命令:
     lib /EXTRACT:opencv_highgui.dir\Debug\window.obj opencv_highgui310d.lib

该命令在当前目录下生成了window.obj文件
  • 从window.obj提取编译时的关联pdb文件路径和名称
命令:
         dumpbin /section:.debug$T /rawdata window.obj

输出 :
        Dump of file window.obj
        File Type: EXTENDED COFF OBJECT

SECTION HEADER #3
.debug$T name
       0 physical address
       0 virtual address
      70 size of raw data
    4236 file pointer to raw data (00004236 to 000042A5)
       0 file pointer to relocation table
       0 file pointer to line numbers
       0 number of relocations
       0 number of line numbers
42100040 flags
         Initialized Data
         Discardable
         1 byte align
         Read Only

RAW DATA #3
  00000000: 04 00 00 00 6A 00 15 15 74 8C 65 6D CD CA 70 4F  ....j...t.emÍÊpO
  00000010: B8 DF 83 D1 3F 04 86 FE 02 00 00 00 44 3A 5C 50  ¸ß.Ñ?..þ....D:\P
  00000020: 72 6F 6A 65 63 74 73 5C 66 72 61 6D 65 77 6F 72  rojects\framewor
  00000030: 6B 2D 6C 69 62 73 5C 76 73 32 30 31 35 2D 77 69  k-libs\vs2015-wi
  00000040: 6E 36 34 5C 6F 70 65 6E 63 76 33 2E 31 5C 6C 69  n64\opencv3.1\li
  00000050: 62 5C 44 65 62 75 67 5C 6F 70 65 6E 63 76 5F 68  b\Debug\opencv_h
  00000060: 69 67 68 67 75 69 33 31 30 64 2E 70 64 62 00 F1  ighgui310d.pdb.ñ

这样我们就很清晰的看到了编译opencv_highgui310d.lib时,在D:\Projects\framework-libs\vs2105-win64\opencv3.1\lib\Debug\目录下一并生成了opencv_highgui310d.pdb文件。现在去编译机器上相应的目录下面把这个pdb文件拷贝到你当前机器的opencv_highgui310d.lib同一个目录下,问题就解决了!

6>CalibrationHelper.lib(D3DValidationHelper.obj) : warning LNK4217: 本地定义的符号 ??0PrecisionPara@d3d@@QEAA@XZ (public: __cdecl d3d::PrecisionPara::PrecisionPara(void)) 在函数 "public: static void __cdecl std::_Default_allocator_traits<class std::allocator<class d3d::PrecisionPara> >::construct<class d3d::PrecisionPara>(class std::allocator<class d3d::PrecisionPara> &,class d3d::PrecisionPara * const)" (??$construct@VPrecisionPara@d3d@@$$V@?$_Default_allocator_traits@V?$allocator@VPrecisionPara@d3d@@@std@@@std@@SAXAEAV?$allocator@VPrecisionPara@d3d@@@1@QEAVPrecisionPara@d3d@@@Z) 中导入 96>CalibrationHelper.lib(D3DValidationHelper.obj) : warning LNK4217: 本地定义的符号 ??1PrecisionPara@d3d@@QEAA@XZ (public: __cdecl d3d::PrecisionPara::~PrecisionPara(void)) 在函数 "public: void * __cdecl d3d::PrecisionPara::`scalar deleting destructor'(unsigned int)" (??_GPrecisionPara@d3d@@QEAAPEAXI@Z) 中导入 96>CalibrationHelper.lib(D3DValidationHelper.obj) : warning LNK4217: 本地定义的符号 ?WriteDetailResults@PrecisionPara@d3d@@QEAAXPEBD_N1@Z (public: void __cdecl d3d::PrecisionPara::WriteDetailResults(char const *,bool,bool)) 在函数 "public: bool __cdecl d3d::D3DValidationHelper::Validate(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,int)" (?Validate@D3DValidationHelper@d3d@@QEAA_NV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@0H@Z) 中导入 96>CalibrationHelper.lib(D3DValidationHelper.obj) : warning LNK4217: 本地定义的符号 ?CheckStatus@PrecisionPara@d3d@@QEAA_NXZ (public: bool __cdecl d3d::PrecisionPara::CheckStatus(void)) 在函数 "public: bool __cdecl d3d::D3DValidationHelper::Validate(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,int)" (?Validate@D3DValidationHelper@d3d@@QEAA_NV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@0H@Z) 中导入 96>CalibrationHelper.lib(D3DValidationHelper.obj) : warning LNK4217: 本地定义的符号 ??0PrecisionDiagnose@d3d@@QEAA@XZ (public: __cdecl d3d::PrecisionDiagnose::PrecisionDiagnose(void)) 在函数 "public: __cdecl d3d::D3DValidationHelper::D3DValidationHelper(void)" (??0D3DValidationHelper@d3d@@QEAA@XZ) 中导入 96>CalibrationHelper.lib(D3DValidationHelper.obj) : warning LNK4217: 本地定义的符号 ?GetPrecisionPara@PrecisionDiagnose@d3d@@QEAAXAEAVPrecisionPara@2@@Z (public: void __cdecl d3d::PrecisionDiagnose::GetPrecisionPara(class d3d::PrecisionPara &)) 在函数 "private: int __cdecl d3d::D3DValidationHelper::DiagnoseFlatPlane(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class d3d::PrecisionPara &,int,bool)" (?DiagnoseFlatPlane@D3DValidationHelper@d3d@@AEAAHV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@00AEAVPrecisionPara@2@H_N@Z) 中导入 96>OpenCLManager_debug.lib(OpenCLManager.obj) : warning LNK4099: 未找到 PDB“OpenCLManager.pdb”(使用“OpenCLManager_debug.lib(OpenCLManager.obj)”或在“C:\Haoyang\MFG\New folder\lfs_d3dvideo_code\build-x64\bin\Debug\OpenCLManager.pdb”中寻找);正在链接对象,如同没有调试信息一样 96>glew32s.lib(glew.obj) : warning LNK4099: 未找到 PDB“vc120.pdb”(使用“glew32s.lib(glew.obj)”或在“C:\Haoyang\MFG\New folder\lfs_d3dvideo_code\build-x64\bin\Debug\vc120.pdb”中寻找);正在链接对象,如同没有调试信息一样 96>MFGTool.vcxproj -> C:\Haoyang\MFG\New folder\lfs_d3dvideo_code\build-x64\bin\Debug\MFGTool.dll 96>已完成生成项目“MFGTool.vcxproj”的操作。
最新发布
03-15
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值