warning LNK4099: PDB 原因及解决方案

本文针对路径错误导致的问题提供了两种解决方案:一种是在不需要调试开源库的情况下,通过修改编译设置来提高编译速度;另一种是在需要调试的情况下,调整调试信息格式和程序数据库文件名设置。

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

出现这个问题,原因无非是路径错误,有两种解决方案

1.如果确认不需要PDB, 即不需要调试开源库, 完全可以在设置里将/Zi或/ZI去掉, 这样即能消除warning也能提升开源库编译速度

2.如果需要调试开源库, 方法也不复杂
(1). 将开源库project里的C/C++->General->Debug Information Format 设置为Zi或ZI(两者区别请自行google, Zi就够用了, 只是高版本的VS默认都是ZI)
(2). 然后在C/C++->Output Files->Pragram Database File Name 设置为$(OutDir)$(TargetName).pdb, (有些2B开源库这里设置的跟VS默认的是一样的比如$(IntDir)vc$(PlatformToolsetVersion).pdb, 但把IntDir改成了同一个目录, 每个project生成出来的pdb名字路径都是一致的, 当然就会出问题), 这里需要注意的是, 一定要确保$(OutDir)$(TargetName)是有意义的, 个别开源库完全不用vs自带的宏, 甚至个别开源库需要configure之后才生产vc project, 甚至是绝对路径, 但你所要确保的是, 目录必须跟生成的.lib是同一个, 文件名(不包括扩展名)必须是和生成的xxx.lib的xxx是一致的. 之后你要做的就是把每个project的debug&release都按照如上改好再编译就ok了

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
1>f:\code\cncautodrlhole\casting_slide_base\casting_slide_base\jfun.cpp(208): warning C4715: “ConfigData::getStandardByName”: 不是所有的控件路径都返回值 1>xt_lib_uf.lib(xt_windows.obj) : error LNK2038: 检测到“_MSC_VER”的不匹配项: 值“1600”不匹配值“1700”(casting_slide_base.obj 中) 1>xt_lib_uf.lib(xt_modl.obj) : error LNK2038: 检测到“_MSC_VER”的不匹配项: 值“1600”不匹配值“1700”(casting_slide_base.obj 中) 1>xt_lib_uf.lib(xt_assem.obj) : error LNK2038: 检测到“_MSC_VER”的不匹配项: 值“1600”不匹配值“1700”(casting_slide_base.obj 中) 1>xt_lib_uf.lib(xt_block_styler.obj) : error LNK2038: 检测到“_MSC_VER”的不匹配项: 值“1600”不匹配值“1700”(casting_slide_base.obj 中) 1>xt_lib_uf.lib(xt_curve.obj) : error LNK2038: 检测到“_MSC_VER”的不匹配项: 值“1600”不匹配值“1700”(casting_slide_base.obj 中) 1>xt_lib_uf.lib(xt_text.obj) : error LNK2038: 检测到“_MSC_VER”的不匹配项: 值“1600”不匹配值“1700”(casting_slide_base.obj 中) 1> 正在创建库 F:\Code\CncAutoDrlHole\casting_slide_base\x64\NX10\/casting_slide_base.lib 和对象 F:\Code\CncAutoDrlHole\casting_slide_base\x64\NX10\/casting_slide_base.exp 1>xt_lib_uf.lib(xt_block_styler.obj) : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: unsigned int __cdecl NXOpen::TaggedObject::GetTag(void)const " (__imp_?GetTag@TaggedObject@NXOpen@@QEBAIXZ),该符号在函数 "public: void __cdecl nxform::set_wcs(void)" (?set_wcs@nxform@@QEAAXXZ) 中被引用 1>F:\Code\CncAutoDrlHole\casting_slide_base\x64\NX10\/casting_slide_base.dll : fatal error LNK1120: 1 个无法解析的外部命令
03-19
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值