在Visual Studio 2017(VC++)中禁用链接阶段库警告是否安全?
关于禁用LNK4099警告的安全性分析
首先得先搞明白这个警告的本质:你用到的jsoncpp.lib是带调试信息编译出来的,但链接器找不到对应的jsoncpp_lib_static.pdb调试符号文件,所以只能把这个库当成无调试信息的对象来处理,这就是LNK4099警告的由来。
接下来分场景说说禁用这个警告是否安全:
如果你不需要调试jsoncpp库的内部代码:
完全安全。这个警告只是链接器在提示你“没法提供库内部的调试支持”,但对程序的功能、运行稳定性没有任何影响。你可以放心禁用它,操作方法是:
右键你的项目 → 属性 → 配置属性 → 链接器 → 命令行 → 附加选项里添加/ignore:4099,或者在“链接器 → 输入”的“忽略特定警告”中填入4099。如果你需要调试jsoncpp的内部实现:
禁用警告就不合适了。因为这时候你会丢失库内部的调试符号,没法查看库中的变量值、完整调用栈等关键调试信息。这种情况下,建议解决根源问题:- 重新编译jsoncpp库,确保生成对应的pdb文件,然后把pdb放到链接器能找到的位置(比如你的项目Debug目录,或者jsoncpp.lib所在的目录);
- 或者下载带有pdb文件的预编译版jsoncpp。
总的来说,绝大多数日常开发场景下,禁用这个警告是完全没问题的——毕竟你大概率不需要深入调试第三方库的内部逻辑,只是用它的功能而已。
内容的提问来源于stack exchange,提问作者msc




