Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 52925|回复: 0

warning LNK4099: PDB 原因及解决方案

[复制链接]
  • TA的每日心情
    奋斗
    2024-4-6 11:05
  • 签到天数: 748 天

    [LV.9]以坛为家II

    2034

    主题

    2092

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    705612
    发表于 2021-4-13 08:34:52 | 显示全部楼层 |阅读模式

    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目录拷过去(这个没用)等等, 都没鸟用
    希望能有所帮助

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-20 10:35 , Processed in 0.129774 second(s), 30 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表