- #define ELPP_UNICODE
- #include "easylogging++.h"
- INITIALIZE_EASYLOGGINGPP
- int main(int argc, char** argv)
- {
- /// 同时使用 START_EASYLOGGINGPP 才能使用Unicode
- START_EASYLOGGINGPP(argc, argv);
- LOG(INFO) << L"宏定义演示。";
- system("pause");
- return 0;
- }
结果编译器链接的时候报错:
1>tijianji.obj : error LNK2001: 无法解析的外部符号 "public: virtual class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> > __thiscall el::base::DefaultLogBuilder::build(class el::LogMessage const *,bool)const " (?build@DefaultLogBuilder@base@el@@UBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@PBVLogMessage@3@_N@Z)
1>E:\__wang\workspace\Projects\tijianji\Debug\tijianji.exe : fatal error LNK1120: 1 个无法解析的外部命令
是宏INITIALIZE_EASYLOGGINGPP里面的class DefaultLogBuilder : public LogBuilder {
public:
base::type::string_t build(const LogMessage* logMessage, bool appendNewLine) const;
};引起的。报错应该是string_t无法识别引起的,这个类型声明是这样的:
#if defined(ELPP_UNICODE)
# define ELPP_LITERAL(txt) L##txt
# define ELPP_STRLEN wcslen
# if defined ELPP_CUSTOM_COUT
# define ELPP_COUT ELPP_CUSTOM_COUT
# else
# define ELPP_COUT std::wcout
# endif // defined ELPP_CUSTOM_COUT
typedef wchar_t char_t;
typedef std::wstring string_t;
typedef std::wstringstream stringstream_t;
typedef std::wfstream fstream_t;
typedef std::wostream ostream_t;
#else
# define ELPP_LITERAL(txt) txt
# define ELPP_STRLEN strlen
# if defined ELPP_CUSTOM_COUT
# define ELPP_COUT ELPP_CUSTOM_COUT
# else
# define ELPP_COUT std::cout
# endif // defined ELPP_CUSTOM_COUT
typedef char char_t;
typedef std::string string_t;
typedef std::stringstream stringstream_t;
typedef std::fstream fstream_t;
typedef std::ostream ostream_t;
#endif // defined(ELPP_UNICODE)
我明明都定义了宏#define ELPP_UNICODE为什么还是无法解析?
最后灵机一动把ELPP_UNICODE添加到“预处理器定义”里面,结果就链接通过了。