log4cplus使用过程中“LOG4CPLUS_WARN”: 找不到标识符和无法解析的外部符号(链接错误)的解决方法
在学习log4cplus学习过程中,运行第一个很简单的例子就遇到了问题。(例子来源http://blog.****.net/Augusdi/article/details/8989494)例子如下:
- //include .h file
- #include </logger.h>
- #include <log4cplus/fileappender.h>
- #include <log4cplus/consoleappender.h>
- #include <log4cplus/layout.h>
- using namespace log4cplus;
- using namespace log4cplus::helpers;
- // Link Lib
- #ifndef _DEBUG
- #pragma comment(lib,"log4cplusUS.lib")
- #else
- #pragma comment(lib,"log4cplusUSD.lib")
- #endif
- int _tmain(int argc, _TCHAR* argv[])
- {
- // 定义一个控制台的Appender
- SharedAppenderPtr pConsoleAppender(new ConsoleAppender());
- // 定义一个简单的Layout,并绑定到Appender
- auto_ptr<Layout> pSimpleLayout(new SimpleLayout());
- pConsoleAppender->setLayout(pSimpleLayout);
- // 定义Logger,并设置优先级
- Logger pTestLogger = Logger::getInstance(_T("LoggerName"));
- pTestLogger.setLogLevel(WARN_LOG_LEVEL);
- // 将需要关联Logger的Appender添加到Logger上
- pTestLogger.addAppender(pConsoleAppender);
- // 输出日志信息
- LOG4CPLUS_WARN(pTestLogger, "This is a <Warn> log message...");
- 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字符集:
3)修改运行库,log4cplus的编译默认为多线程调试 DLL (/MDd)选项。将例子的项目属性->配置属性->C/C++->代码生成->运行库 修改为 多线程调试 DLL (/MDd) 即可。