c++ - log4cplus 未解析的外部符号 LNK2001

标签 c++ logging build linker log4cplus

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

在我的“项目属性->配置属性”中,我添加了:

  1. 'log4cplus\include' 到 'C/C++->All Options->Additional Include Directories'
  2. 'log4cplus\msvc10\Win32\obj.log4cplus.Release_Unicode' 到 '链接器->所有选项->附加库目录'
  3. '链接器->所有选项->附加依赖项'中的'log4cplusu.lib'

我还确保在 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

最佳答案

Windows UNICODE 构建是使用 TCHAR 等构建的,定义为 wchar_t 等。当不使用 UNICODE 构建时,定义为使用 TCHAR 定义为 char

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

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

这可以用任何一个来完成;

#define UNICODE
#define _UNICODE

或者在项目设置中;

Project Properties > General > Project Defaults > Character Set

或者在命令行上;

/DUNICODE /D_UNICODE

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

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

关于c++ - log4cplus 未解析的外部符号 LNK2001,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36446217/

相关文章:

build - TeamCity 工件;排除单个文件

c++ - 捕获HID键盘事件

c++ - 调试时如何看到整个数组

c++ - 在 C++ 中以十六进制或八进制表示的整数文字的默认类型是什么?

scala - 如何在 sbt 测试中覆盖 application.conf 中的日志级别?

java - 在 J2SE 应用程序中查看 Commons Logging 调试消息

c++ - 开源dll注入(inject)器

ios - 在 iOS 上修剪日志文件开头行的快速方法

linux - 在 Debian 或 Ubuntu 下自动获取构建依赖项的 Debian 方式是什么?

visual-studio-2010 - 调试现有的共享点解决方案