log4cplus未解析的外部符号LNK2001

时间:2016-04-06 08:58:56

标签: c++ logging build linker log4cplus

我正在尝试在我的项目中使用log4cplus作为记录器。我已经在VS2013中下载并编译了log4cplus' Debug_Unicode'和' Release_Unicode'成功(项目在发布和调试中成功编译)。

在我的项目属性 - >配置属性'我添加了:

  1. ' log4cplus \包括'到' C / C ++ - >所有选项 - >其他包含目录'
  2. ' log4cplus \ msvc10 \的Win32 \ obj.log4cplus.Release_Unicode'到了 '链接器 - >所有选项 - >其他库目录'
  3. ' log4cplusu.lib'在'链接器 - >所有选项 - >其他依赖关系'
  4. 我还确保在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
    

1 个答案:

答案 0 :(得分:2)

使用TCHAR等构建的Windows UNICODE构建定义为wchar_t等。如果未构建UNICODE定义为构建,TCHAR定义为{{1}等等。

构建一个定义了char的库并尝试在未定义UNICODE的项目中链接它将导致链接器错误,因为UNICODE的定义不匹配; TCHARchar

要更正此问题,请使用wchar_t(和UNICODE)的一致定义构建所有必需的库和项目。

这可以通过以下方式完成;

_UNICODE

或者在项目设置中;

  

项目属性&gt;一般&gt;项目默认值&gt;字符集

或者在命令行上;

#define UNICODE
#define _UNICODE

替代方案也适用,如果不打算使用UNICODE,请确保未设置定义,和/或在项目中使用多字符设置并始终如一地应用。

不要忘记在“发布”和“调试”版本之间保持一致。