编译环境:
vs2017 (V141)企业版
win10
sdk:10.0.17763.0
1
严重性 代码 说明 项目 路径 文件 行 禁止显示状态
错误 LNK2019 无法解析的外部符号 "__declspec(dllimport) public: void __cdecl std::basic_ios<char,struct std::char_traits<char> >::setstate(int,bool)" (__imp_?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXH_N@Z),该符号在函数 "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl std::operator<<<struct std::char_traits<char> >(class std::basic_ostream<char,struct std::char_traits<char> > &,char const *)" (??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z) 中被引用 InventRobot ******\InventRobot ******\handle.obj 1
参考:
http://cache.baiducontent.com/c?m=gdvAShxCfjrr34aSW02-Fh_zb8dqnE2L1z-7EfdPx9yaTiMhUkDtADZf5TBkgIM0InoWnCl8_QInEPMCoSg3m44vofWCvmsy0KopVsX3biokNWj5aif2RSFQt66n7arQbXLoltsTXkTP1jSYLKdRjmYSMzand0d8Dy2oucAFRsB79dzfdQRY7hG5dPYlOyl8i8lgRZxxvwvVt206bj8Od_&p=8b2a971d86cc46ac1ea2d73e5752&newp=b474c54ad1c01bf90be2963f445592695803ed603bd5c44324b9d71fd325001c1b69e7b122241400d8c2766600a8435cebf231723c1766dada9fca458ae7c47279&s=d82c8d1619ad8176&user=baidu&fm=sc&query=std%3A%3Abasic%5Fios+setstate%28int%2Cbool%29&qid=d5debdcf000aeef0&p1=5
研究后发现是glog.lib链接的问题,因为glog运行库为/MDd
我程序里用的MFC静态库,运行库为/MTd.
修改为使用MFC动态库,运行库改为/MDd就好了.
2
严重性 代码 说明 项目 路径 文件 行 禁止显示状态
错误 LNK2001 无法解析的外部符号 "__declspec(dllimport) public: __cdecl google::LogMessage::LogMessage(char const *,int)" (__imp_??0LogMessage@google@@QEAA@PEBDH@Z) InventRobot ******serial_device.obj 1
解决方案:
工程-属性-C/C++
预处理器定义加上GOOGLE_GLOG_DLL_DECL=
参考:
https://blog.csdn.net/g9208/article/details/102633056
3
加载 glog 编译报错:
ERROR macro is defined. Define GLOG_NO_ABBREVIATED_SEVERITIES before including logging.h. See the document for detail.
解决方法:
在工程加上预编译宏GLOG_NO_ABBREVIATED_SEVERITIES
参考:
https://blog.csdn.net/cm333666/article/details/100227786
4 引用glog的工程,编译时出现msvc版本警告
原因:引用glog的工程是unicode,glog是多字节
解决方案:将glog的工程属性改为unicode,默认的是多字节
5 引用glog的工程,编译时出现link错误
解决方案:将glog的工程改为64位,默认的是32位,记着改目标计算机设置。重新编译生成x64的lib