如何编译同时使用 windows.h 和 google glog (glog/logging.h) 的 C++ 程序?
How to compile a c++ program that uses both windows.h and google glog (glog/logging.h)?
我有两个图书馆A和B,图书馆B是我自己的图书馆,我需要"windows.h"在里面。此外,对于某些功能,我需要使用第三方库 A。A 使用 google 日志库,问题在于:
第一个错误是:
Severity Code Description Project File Line Error C1189 #error: ERROR macro is defined. Define GLOG_NO_ABBREVIATED_SEVERITIES before including logging.h
我在"A.h"之前定义了GLOG_NO_ABBREVIATED_SEVERITIES,但在那之后出现了奇怪的链接错误。我已经测试了 here 建议的所有解决方案,但其中 none 有效。
在使用"windows.h"的项目中还有其他方法可以使用glog吗?
编辑:
链接器错误是:
error LNK2019: unresolved external symbol "__declspec(dllimport) public: char __thiscall std::basic_ios<char,struct std::char_traits<char> >::fill(char)" (__imp_?fill@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEDD@Z) referenced in function "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl std::operator<<<char,struct std::char_traits<char>,char>(class std::basic_ostream<char,struct std::char_traits<char> > &,struct std::_Fillobj<char> const &)" (??$?6DU?$char_traits@D@std@@D@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@ABU?$_Fillobj@D@0@@Z)
error LNK2019: unresolved external symbol "__declspec(dllimport) public: class std::basic_ostream<char,struct std::char_traits<char> > & __thiscall std::basic_ostream<char,struct std::char_traits<char> >::operator<<(class std::ios_base & (__cdecl*)(class std::ios_base &))" (__imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAVios_base@1@AAV21@@Z@Z) referenced in function _getHtsLables
error LNK2019: unresolved external symbol "__declspec(dllimport) public: class std::basic_ostream<char,struct std::char_traits<char> > & __thiscall std::basic_ostream<char,struct std::char_traits<char> >::operator<<(double)" (__imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@N@Z) referenced in function "public: virtual void __thiscall AD3::FactorDense::Print(class std::basic_ostream<char,struct std::char_traits<char> > &)" (?Print@FactorDense@AD3@@UAEXAAV?$basic_ostream@DU?$char_traits@D@std@@@std@@@Z)
fatal error LNK1120: 3 unresolved externals
我在添加 GLOG_NO_ABBREVIATED_SEVERITIES 后重新编译了 A,但没有任何改变。但问题通过重新排序包含 "A.h" 和 "windows.h" 来解决。当我在 "windows.h" 之前包含 "A.h" 时,不会出现错误!!!我不明白链接器错误的真正原因是什么! – 付款人
在包含 logging.h
之前定义 GLOG_NO_ABBREVIATED_SEVERITIES
#define GLOG_NO_ABBREVIATED_SEVERITIES
#include <windows.h>
#include <glog/logging.h>
在Visual Studio中的预处理器定义中添加GLOG_NO_ABBREVIATED_SEVERITIES
,即Project > Properties > C/C++ > Preprocessor
.
我有两个图书馆A和B,图书馆B是我自己的图书馆,我需要"windows.h"在里面。此外,对于某些功能,我需要使用第三方库 A。A 使用 google 日志库,问题在于:
第一个错误是:
Severity Code Description Project File Line Error C1189 #error: ERROR macro is defined. Define GLOG_NO_ABBREVIATED_SEVERITIES before including logging.h
我在"A.h"之前定义了GLOG_NO_ABBREVIATED_SEVERITIES,但在那之后出现了奇怪的链接错误。我已经测试了 here 建议的所有解决方案,但其中 none 有效。
在使用"windows.h"的项目中还有其他方法可以使用glog吗?
编辑:
链接器错误是:
error LNK2019: unresolved external symbol "__declspec(dllimport) public: char __thiscall std::basic_ios<char,struct std::char_traits<char> >::fill(char)" (__imp_?fill@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEDD@Z) referenced in function "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl std::operator<<<char,struct std::char_traits<char>,char>(class std::basic_ostream<char,struct std::char_traits<char> > &,struct std::_Fillobj<char> const &)" (??$?6DU?$char_traits@D@std@@D@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@ABU?$_Fillobj@D@0@@Z)
error LNK2019: unresolved external symbol "__declspec(dllimport) public: class std::basic_ostream<char,struct std::char_traits<char> > & __thiscall std::basic_ostream<char,struct std::char_traits<char> >::operator<<(class std::ios_base & (__cdecl*)(class std::ios_base &))" (__imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAVios_base@1@AAV21@@Z@Z) referenced in function _getHtsLables
error LNK2019: unresolved external symbol "__declspec(dllimport) public: class std::basic_ostream<char,struct std::char_traits<char> > & __thiscall std::basic_ostream<char,struct std::char_traits<char> >::operator<<(double)" (__imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@N@Z) referenced in function "public: virtual void __thiscall AD3::FactorDense::Print(class std::basic_ostream<char,struct std::char_traits<char> > &)" (?Print@FactorDense@AD3@@UAEXAAV?$basic_ostream@DU?$char_traits@D@std@@@std@@@Z)
fatal error LNK1120: 3 unresolved externals
我在添加 GLOG_NO_ABBREVIATED_SEVERITIES 后重新编译了 A,但没有任何改变。但问题通过重新排序包含 "A.h" 和 "windows.h" 来解决。当我在 "windows.h" 之前包含 "A.h" 时,不会出现错误!!!我不明白链接器错误的真正原因是什么! – 付款人
在包含
之前定义logging.h
GLOG_NO_ABBREVIATED_SEVERITIES
#define GLOG_NO_ABBREVIATED_SEVERITIES #include <windows.h> #include <glog/logging.h>
在Visual Studio中的预处理器定义中添加
GLOG_NO_ABBREVIATED_SEVERITIES
,即Project > Properties > C/C++ > Preprocessor
.