VS warning LNK4099:未找到 PDB 的解决方案

当使用VC链接第三方静态库时可能会遇到LNK4099警告,原因是PDB路径问题。解决方法包括:1)关闭调试信息生成(Zi或ZI),消除警告并提高编译速度;2)若需调试,需在开源库项目中设置DebugInformationFormat为Zi,并正确配置ProgramDatabaseFileName,确保与.lib文件在同一目录且文件名匹配。

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

举例: “warning LNK4099: 未找到 PDB“vc120.pdb”(使用“sqlite3d.lib(sqlite3secure.obj)”或在“D:\test\Debug\vc120.pdb”中寻找);正在链接对象,如同没有调试信息一样”。 使用VC时链接了第三方静态库, 并且第三方静态库(一般是开源的三方库)是在一个solution下的多个project, 当然, 网上基本都是这么回答的, 其实本质原因是因为这些开源库一般都会通过各种方式修改solution和project的默认路径把二进制生成到同一个目录下, 比如lib, 而我们自己平时简单的静态库工程是不怎么修改默认工程配置的.由于每个开源库的作者有自己的工程组织方式, 但导致LNK4099的最终原因无非是PDB路径问题

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


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

1>xt_lib_uf.lib(xt_windows.obj) : warning LNK4099: 未找到 PDB“xt_lib_uf.pdb”(使用“xt_lib_uf.lib(xt_windows.obj)”或在“F:\code\CncAutoDrlHole\find_std_xuti_subtract\find_std_xuti_subtract\x64\NX12\xt_lib_uf.pdb”中寻找);正在链接对象,如同没有调试信息一样 1>find_std_xuti_subtract.vcxproj -> F:\code\CncAutoDrlHole\find_std_xuti_subtract\find_std_xuti_subtract\x64\NX12\find_std_xuti_subtract.dll 1>find_std_xuti_subtract.vcxproj -> F:\code\CncAutoDrlHole\find_std_xuti_subtract\find_std_xuti_subtract\x64\NX12\find_std_xuti_subtract.pdb (Full PDB) 1>The MSVCDir environment variable is not defined 1>This variable is necessary only when using uflink or starting up Studio 1>from this window. You must modify the ufvars.bat file to define this. 1>Error signing application, F:\code\CncAutoDrlHole\find_std_xuti_subtract\find_std_xuti_subtract\x64\NX12\find_std_xuti_subtract.dll. 1> Application has not been compiled with NXSigningResource.cpp. 1>Checking for the presence of c_p_p_author license. 1>Signing files... 1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(133,5): error MSB3073: 命令“call "E:\UG\NX12.0\ugii\ugiicmd.bat" "E:\UG\NX12.0" 1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(133,5): error MSB3073: "E:\UG\NX12.0\NXBIN\signcpp.exe" "F:\code\CncAutoDrlHole\find_std_xuti_subtract\find_std_xuti_subtract\x64\NX12\find_std_xuti_subtract.dll" 1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(133,5): error MSB3073: :VCEnd”已退出,代码为 -1。 1>已完成生成项目“find_std_xuti_subtract.vcxproj”的操作 - 失败。
03-19
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值