log4cplus使用过程中“LOG4CPLUS_WARN”: 找不到标识符和无法解析的外部符号(链接错误)的解决方法

在学习log4cplus学习过程中,运行第一个很简单的例子就遇到了问题。(例子来源http://blog.****.net/Augusdi/article/details/8989494)例子如下:

 

  1. //include .h file   
  2. #include </logger.h>   
  3. #include <log4cplus/fileappender.h>   
  4. #include <log4cplus/consoleappender.h>   
  5. #include <log4cplus/layout.h>   
  6. using namespace log4cplus;   
  7. using namespace log4cplus::helpers;   
  8. // Link Lib   
  9. #ifndef _DEBUG   
  10. #pragma comment(lib,"log4cplusUS.lib")   
  11. #else   
  12. #pragma comment(lib,"log4cplusUSD.lib")   
  13. #endif   
  14. int _tmain(int argc, _TCHAR* argv[])   
  15. {      
  16.         // 定义一个控制台的Appender   
  17.         SharedAppenderPtr pConsoleAppender(new ConsoleAppender());   
  18.   
  19.         // 定义一个简单的Layout,并绑定到Appender   
  20.         auto_ptr<Layout> pSimpleLayout(new SimpleLayout());   
  21.         pConsoleAppender->setLayout(pSimpleLayout);   
  22.   
  23.         // 定义Logger,并设置优先级   
  24.         Logger pTestLogger = Logger::getInstance(_T("LoggerName"));      
  25.         pTestLogger.setLogLevel(WARN_LOG_LEVEL);   
  26.   
  27.         // 将需要关联Logger的Appender添加到Logger上   
  28.         pTestLogger.addAppender(pConsoleAppender);   
  29.   
  30.         // 输出日志信息   
  31.         LOG4CPLUS_WARN(pTestLogger, "This is a <Warn> log message...");   
  32.   
  33.         return 0;   


问题1) error C3861: “LOG4CPLUS_WARN”:  找不到标识符。

解决方法:添加包含文件#include <log4cplus/loggingmacros.h>

问题2) error LNK2019: 无法解析的外部符号:。。。。。链接错误原因可能有三种:

1)调试模式与链接的库文件不相符(如Debug模式下使用了release库);

2)项目字符集与库文件字符集不一致,我编译的log4cplus使用的是Unicode字符集版本;

3)例子代码生成的运行库设置与编译时不一致。

解决方法:

1)链接正确的库文件或者修改Debug或Release模式,此问题较简单,不再赘述。

2)修改项目字符集为Unicode字符集:

log4cplus使用过程中“LOG4CPLUS_WARN”: 找不到标识符和无法解析的外部符号(链接错误)的解决方法

3)修改运行库,log4cplus的编译默认为多线程调试 DLL (/MDd)选项。将例子的项目属性->配置属性->C/C++->代码生成->运行库 修改为 多线程调试 DLL (/MDd) 即可。