Visual Studio 2005编译log4cpp 1.1.3出现标识符未找到错误如何解决
VS2005编译log4cpp 1.1.3静态库解决方案
核心错误原因
你遇到的两类报错分别来自两个问题:
- 初始的
time、localtime_s未找到:log4cpp 1.1.3默认没有适配VS2005的头文件依赖,缺少必要的CRT头文件引用 - 引入
time.h后的新报错:VS2005的localtime_s函数参数顺序和log4cpp默认用的POSIX标准实现相反,同时缺少静态库编译相关的预处理器宏定义
分步解决操作
1. 项目预处理器配置
打开你的log4cpp静态库项目属性页,依次进入「配置属性 → C/C++ → 预处理器 → 预处理器定义」,添加如下宏:
LOG4CPP_STATIC:标记当前编译的是静态库版本,避免类导入/导出声明冲突,后续你自己的业务项目引用这个静态库时也需要添加该宏_CRT_SECURE_NO_WARNINGS:屏蔽VS对传统CRT函数的安全检查报错- 同时确保已经存在
WIN32、_WINDOWS宏,Release配置加NDEBUG,Debug配置加_DEBUG
2. 统一添加缺失的头文件引用
不要直接在dailyrollingfileappender.cpp中单独加time.h,而是在log4cpp源码根目录新建config.h文件,写入以下内容,同时把config.h所在路径加入项目的头文件包含目录:
#include <time.h> #include <sys/stat.h> #define HAVE_SYS_STAT_H 1 #define HAVE_LOCALTIME_S 1
3. 修正localtime_s参数顺序
打开dailyrollingfileappender.cpp,找到所有调用localtime_s的代码(共2处,对应原报错的62行、160行),把原有POSIX风格的调用:
localtime_s(¤t_tm, &now);
调整为VS2005适配的参数顺序:
localtime_s(current_tm, &now);
4. 编译生成
重新生成项目即可得到可用的静态lib文件。
内容的提问来源于stack exchange,提问作者linarcx
相关产品推荐
相关产品推荐

