log4cplus 未解析的外部符号 LNK2001
log4cplus unresolved external symbol LNK2001
我正在尝试在我的项目中使用 log4cplus 作为记录器。我已经在 VS2013 中下载并编译了 log4cplus 'Debug_Unicode' 和 'Release_Unicode' 成功(项目在 Release 和 Debug 中编译成功)。
在我的 'Project Properties->Configuration Properties' 我添加了:
- 'log4cplus\include' 到 'C/C++->All Options->Additional Include Directories'
- 'log4cplus\msvc10\Win32\obj.log4cplus.Release_Unicode' 到
'Linker->All Options->Additional Library Directories'
- 'log4cplusu.lib' 在 'Linker->All Options->Additional Dependencies'
我还确保在 log4cplus 项目和我自己的项目中使用相同的运行时库,在我的例子中是多线程 DLL (/MD)。
但是当我尝试构建我的项目时,出现以下 link 错误:
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
A Windows UNICODE 构建是使用 TCHAR
等构建的,被定义为 wchar_t
等。当不使用 UNICODE
构建时,定义为使用 [=12= 构建]定义为char
等
构建一个定义了 UNICODE
的库并尝试在未定义 UNICODE
的项目中 link 它会导致 linker 错误,因为会有TCHAR
的定义不匹配; char
对比 wchar_t
.
要更正此问题,请使用 UNICODE
(和 _UNICODE
)的一致定义构建所有必需的库和项目。
这可以用任何一个来完成;
#define UNICODE
#define _UNICODE
或者在项目设置中;
Project Properties > General > Project Defaults > Character Set
或者在命令行上;
/DUNICODE /D_UNICODE
替代方案也适用,如果不打算使用 UNICODE,请确保未设置定义,and/or项目中使用多字符设置并始终如一地应用。
不要忘记在 "Release" 和 "Debug" 构建之间保持一致。
我正在尝试在我的项目中使用 log4cplus 作为记录器。我已经在 VS2013 中下载并编译了 log4cplus 'Debug_Unicode' 和 'Release_Unicode' 成功(项目在 Release 和 Debug 中编译成功)。
在我的 'Project Properties->Configuration Properties' 我添加了:
- 'log4cplus\include' 到 'C/C++->All Options->Additional Include Directories'
- 'log4cplus\msvc10\Win32\obj.log4cplus.Release_Unicode' 到 'Linker->All Options->Additional Library Directories'
- 'log4cplusu.lib' 在 'Linker->All Options->Additional Dependencies'
我还确保在 log4cplus 项目和我自己的项目中使用相同的运行时库,在我的例子中是多线程 DLL (/MD)。
但是当我尝试构建我的项目时,出现以下 link 错误:
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
A Windows UNICODE 构建是使用 TCHAR
等构建的,被定义为 wchar_t
等。当不使用 UNICODE
构建时,定义为使用 [=12= 构建]定义为char
等
构建一个定义了 UNICODE
的库并尝试在未定义 UNICODE
的项目中 link 它会导致 linker 错误,因为会有TCHAR
的定义不匹配; char
对比 wchar_t
.
要更正此问题,请使用 UNICODE
(和 _UNICODE
)的一致定义构建所有必需的库和项目。
这可以用任何一个来完成;
#define UNICODE
#define _UNICODE
或者在项目设置中;
Project Properties > General > Project Defaults > Character Set
或者在命令行上;
/DUNICODE /D_UNICODE
替代方案也适用,如果不打算使用 UNICODE,请确保未设置定义,and/or项目中使用多字符设置并始终如一地应用。
不要忘记在 "Release" 和 "Debug" 构建之间保持一致。