warning LNK4099: PDB 原因及解决方案
2017-09-28 11:40
204 查看
0x00 现象及原因
举例: warning LNK4099: PDB ‘wxbase30ud.pdb‘ was not found with ‘wxbase30ud.lib(any.obj)‘
使用VC时链接了三方静态库, 并且三方静态库(一般是开源的三方库)是在一个solution下的多个project, 当然, 网上基本都是这么回答的, 其实本质原因是因为这些开源库一般都会通过各种方式修改solution和project的默认路径把二进制生成到同一个目录下, 比如lib, 而我们自己平时简单的静态库工程是不怎么修改默认工程配置的.
由于每个开源库的作者有自己的工程组织方式, 但导致LNK4099的最终原因无非是PDB路径问题
0x01 解决方案
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)$(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了
0x02 总结
其实这个问题完全不是编译器或VS的事(这也说明了即使你disable 4099 waning依然还会报, 因为压根跟编译没关系), 就是路径错了, 改对就ok了.
网上绝大多数回答要不然就是跑题告诉你如何如何屏蔽不显示这个warning, 要不就是让你把obj目录拷过去(这个没用)等等, 都没鸟用
希望能有所帮助
warning LNK4099: PDB 原因及解决方案
标签:使用 si it la 文件 问题 方法 Go for
原文:http://www.cnblogs.com/fqucuo/p/4887083.html
举例: warning LNK4099: PDB ‘wxbase30ud.pdb‘ was not found with ‘wxbase30ud.lib(any.obj)‘
使用VC时链接了三方静态库, 并且三方静态库(一般是开源的三方库)是在一个solution下的多个project, 当然, 网上基本都是这么回答的, 其实本质原因是因为这些开源库一般都会通过各种方式修改solution和project的默认路径把二进制生成到同一个目录下, 比如lib, 而我们自己平时简单的静态库工程是不怎么修改默认工程配置的.
由于每个开源库的作者有自己的工程组织方式, 但导致LNK4099的最终原因无非是PDB路径问题
0x01 解决方案
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)$(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了
0x02 总结
其实这个问题完全不是编译器或VS的事(这也说明了即使你disable 4099 waning依然还会报, 因为压根跟编译没关系), 就是路径错了, 改对就ok了.
网上绝大多数回答要不然就是跑题告诉你如何如何屏蔽不显示这个warning, 要不就是让你把obj目录拷过去(这个没用)等等, 都没鸟用
希望能有所帮助
warning LNK4099: PDB 原因及解决方案
标签:使用 si it la 文件 问题 方法 Go for
原文:http://www.cnblogs.com/fqucuo/p/4887083.html
相关文章推荐
- warning LNK4099: PDB 原因及解决方案
- warning LNK4099: PDB 原因及解决方案
- warning LNK4099: PDB 原因及解决方案
- warning LNK4099: PDB 原因及解决方案
- warning LNK4099: PDB 原因及解决方案
- warning LNK4099: PDB 原因及解决方案
- warning LNK4099: PDB 'vc100.pdb' was not found... 解决方案
- 使用float:right后内容下移换行的原因及解决方案
- 野鸟装备2.0版本审核被拒2次的原因及解决方案
- Warning: Cannot modify header information原因及解决方案
- ASP.NET Session丢失问题原因及解决方案[转]
- 异常处理:Null value was assigned to a property of primitive type setter of"原因及解决方案
- Win7运行某些游戏提示“丢失d3dx9_**.dll”问题原因及解决方案
- 普通用户非root用户winscp连接linux时提示用户连接失败监测到超时的原因以及解决方案
- Android内存泄漏产生的原因以及解决方案(OOM)
- Warning: Cannot modify header information原因及解决方案
- java多个实例对象线程同步无效的原因以及解决方案
- MongoDB 中文显示乱码的 真正原因和解决方案,真的是cmd问题吗?
- sun.misc.BASE64Encoder在Eclipse中不能直接使用的原因和解决方案
- Cocos2d-x 实现地图滚动,解释缝隙产生的原因以及解决方案