我正在尝试在我的项目中使用log4cplus作为记录器。我已经在VS2013中下载并编译了log4cplus' Debug_Unicode'和' Release_Unicode'成功(项目在发布和调试中成功编译)。
在我的项目属性 - >配置属性'我添加了:
我还确保在log4cplus项目和我自己的项目中使用相同的运行时库,在我的情况下是多线程DLL(/ MD)。
但是当我尝试构建项目时,我收到以下链接错误:
error LNK2001: unresolved external symbol "class std::basic_ostringstream<char,struct std::char_traits<char>,class std::allocator<char> > & __cdecl log4cplus::detail::get_macro_body_oss(void)" (?get_macro_body_oss@detail@log4cplus@@YAAAV?$basic_ostringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ) error LNK2001: unresolved external symbol "void __cdecl log4cplus::detail::macro_forced_log(class log4cplus::Logger const &,int,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,char const *,int,char const *)" (?macro_forced_log@detail@log4cplus@@YAXABVLogger@2@HABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PBDH2@Z) fatal error LNK1120: 2 unresolved externals
答案 0 :(得分:2)
使用TCHAR
等构建的Windows UNICODE构建定义为wchar_t
等。如果未构建UNICODE
定义为构建,TCHAR
定义为{{1}等等。
构建一个定义了char
的库并尝试在未定义UNICODE
的项目中链接它将导致链接器错误,因为UNICODE
的定义不匹配; TCHAR
与char
。
要更正此问题,请使用wchar_t
(和UNICODE
)的一致定义构建所有必需的库和项目。
这可以通过以下方式完成;
_UNICODE
或者在项目设置中;
项目属性&gt;一般&gt;项目默认值&gt;字符集
或者在命令行上;
#define UNICODE
#define _UNICODE
替代方案也适用,如果不打算使用UNICODE,请确保未设置定义,和/或在项目中使用多字符设置并始终如一地应用。
不要忘记在“发布”和“调试”版本之间保持一致。