【问题标题】:log4cplus link errors when used in VS2012在 VS2012 中使用 log4cplus 链接错误
【发布时间】:2013-09-20 16:40:20
【问题描述】:

我已经在 VS2012 中下载并编译了 log4cplus。 编译很好(调试和发布) 我尝试在我的代码中使用它,但出现 3 个链接错误,我尝试过的任何操作都没有删除它们。 我正在使用来自 log4cplus 项目的相同包含,以及我编译的库(尝试了所有 3...调试版本和 log4cplusS.lib

我仍然得到这些:

错误 LNK2019:无法解析的外部符号“__declspec(dllimport) 类 std::basic_ostringstream,类 std::allocator > & __cdecl log4cplus::detail::get_macro_body_oss(void)" (_imp?get_macro_body_oss@detail@log4cplus@@YAAAV?$basic_ostringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@XZ) 在函数“int __cdecl Prepare(class std::basic_string,类 std::allocator > &,class std::basic_string,class std::allocator > &,class std::basic_string,类 std::allocator > &,int *,int *,int *)" (?Prepare@@YAHAAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@00PAH11@Z)

错误 LNK2019:无法解析的外部符号“__declspec(dllimport) 公共:静态类 log4cplus::Logger __cdecl log4cplus::Logger::getInstance(类 std::basic_string,类 std::allocator > const &)" (_imp?getInstance@Logger@log4cplus@@SA?AV12@ABV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@ @Z) 在函数“int __cdecl Prepare(class std::basic_string,类 std::allocator > &,class std::basic_string,class std::allocator > &,class std::basic_string,类 std::allocator > &,int *,int *,int *)" (?Prepare@@YAHAAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@00PAH11@Z)

怎么了?

我的代码很简单,在我的 dll cpp 中:

在cpp的顶部我添加了

static Logger logger;

在我添加的功能之一中:

logger = Logger::getInstance(LOG4CPLUS_TEXT("MyDLL"));
LOG4CPLUS_INFO(logger, LOG4CPLUS_TEXT("Prepare Starts"));

【问题讨论】:

    标签: c++ c++11 linker log4cplus


    【解决方案1】:

    很可能您已经使用Release 配置编译了log4cplus。您将需要使用Release_UnicodeDebug 配置类似)。

    【讨论】:

    • 自 Visual Studio 2010(我相信)以来,所有新项目都是使用 TCHAR 创建为 wchar_t(常规设置组中的 Unicode 设置)。此设置定义 UNICODE_UNICODE 预处理器符号。 log4cplus 也使用这些符号。如果你绝对想禁用它,你可以,但我建议不要对任何不是玩具项目的东西这样做。
    • 是的,我使用的是 unicode 版本,无论如何我可能需要它...不是用于日志,而是用于项目的其余部分...
    • 为什么我们应该使用“Release_Unicode”而不是“Release”?如果我想使用“Release”,我该怎么办?
    • @Hawk_85:你当然可以这样做。但是您自己使用 log4cplus 的应用程序必须在未定义 UNICODE_UNICODE 的情况下编译。 IOW,您自己的应用程序必须使用普通的 std::strings 而不是 std::wstring 与 log4cplus 交互。
    猜你喜欢
    • 1970-01-01
    • 2015-05-21
    • 2013-08-04
    • 2012-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-27
    • 1970-01-01
    相关资源
    最近更新 更多