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

本文记录了作者在学习log4cplus过程中遇到的问题及解决办法,包括编译链接错误和宏定义未找到等问题,并提供了详细的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在学习log4cplus学习过程中,运行第一个很简单的例子就遇到了问题。(例子来源http://blog.youkuaiyun.com/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字符集:

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

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值