vs2019__warning_LNK4099__PDB_1">vs2019 - warning LNK4099: 未找到 PDB
概述
工程中用到了一个开源的静态库,在工程为debugx64时,编译警告如下:
1>xlsxwriter_debug_x64.lib(drawing.obj) : warning LNK4099: 未找到 PDB“xlsxwriter.pdb”(使用“xlsxwriter_debug_x64.lib(drawing.obj)”或在“D:\my_dev\my_local_git_prj\soft\exp\exp009TestLink4098MsvcrtLib\main\x64\Debug\xlsxwriter.pdb”中寻找);正在链接对象,如同没有调试信息一样
1>xlsxwriter_debug_x64.lib(format.obj) : warning LNK4099: 未找到 PDB“xlsxwriter.pdb”(使用“xlsxwriter_debug_x64.lib(format.obj)”或在“D:\my_dev\my_local_git_prj\soft\exp\exp009TestLink4098MsvcrtLib\main\x64\Debug\xlsxwriter.pdb”中寻找);正在链接对象,如同没有调试信息一样
1>xlsxwriter_debug_x64.lib(hash_table.obj) : warning LNK4099: 未找到 PDB“xlsxwriter.pdb”(使用“xlsxwriter_debug_x64.lib(hash_table.obj)”或在“D:\my_dev\my_local_git_prj\soft\exp\exp009TestLink4098MsvcrtLib\main\x64\Debug\xlsxwriter.pdb”中寻找);正在链接对象,如同没有调试信息一样
笔记
原因
因为这个开源工程的安装程序做的不好,安装时,不管是debug版还是release版,.lib的名称都相同。
我包进工程时,按照debug/release的静态库编译结果,将.lib改名了。
另外就是.pdb没有随.lib一起拷贝到工程用。
解决方法:
- 将.lib的工程输出名字改成最终要用的名字
- 确认预编译宏中有_DEBUG定义,如果没有,手工添加上。如果工程是CMAKE的,很有可能没有_DEBUG宏。
- 确认静态库工程有调试信息的产生选项
- 开源工程提供的INSTALL工程在自己改了库输出名称后,就不好使了。
自己手工编译工程,将.lib, .pdb一同拷贝出来用。
再编译工程,一切都正常了
#include "xlsxwriter/include/xlsxwriter.h"// 如果包错了静态库, 就会出现LINK4098的警告
// warning LNK4098: 默认库“msvcrt.lib”与其他库的使用冲突;请使用 /NODEFAULTLIB:library
#if (defined(_DEBUG) && defined(_WIN64))
#pragma comment(lib, "xlsxwriter/lib/xlsxwriter_debug_x64.lib")
#elif (defined(NDEBUG) && defined(_WIN64))
#pragma comment(lib, "xlsxwriter/lib/xlsxwriter_release_x64.lib")
#else
#error xlsxwriter only support debug/release + x64
#endif // #if (defined(_DEBUG) && defined(WIN64))void CmainDlg::OnBnClickedButtonTest()
{worksheet_write_string(NULL, 0, 0, NULL, NULL);// worksheet_write_string(p_sheet, row, col, strOpt.UnicodeToUTF8(csCell.GetString()).c_str(), NULL);
}