VS编译log4cpp-v1.1.3
记录各VS版本编译log4cpp-v1.1.3(Windows10系统下)遇到的问题及解决方案。
log4cpp主页链接:http://log4cpp.sourceforge.net/
一 VS2008 & log4cpp-v1.1.3
1.1 问题描述
使用vs2008打开log4cpp中msvc7目录下的msvc7.sln,此时会自动进行项目升级,升级后尝试编译log4cpp项目,errors如下图:
1.2 解决方案
项目中已经包含了Localtime.hh和Localtime.cpp两个文件,在报错的DailyRollingFileAppender.cpp中包含Localtime.hh头文件。如下图:
再次编译,此时报错如下图:
打开log4cpp工程属性页,将【链接器-常规-输出文件 】更改为“<从父级或项目默认设置继承>”,然后将【连接器-高级-导入库】更改为“<从父级或项目默认设置继承>”。
再次编译,成功!
二 VS2013 & logcpp_v1.1.3
使用vs2013打开log4cpp中msvc10目录下的msvc10.sln,此时会自动进行项目升级,升级后尝试编译log4cpp项目,很顺利,没有遇到错误。
二 VS2015 & logcpp_v1.1.3
3.1 问题描述
使用vs2015打开log4cpp中msvc10目录下的msvc10.sln,此时会自动进行项目升级,升级后尝试编译log4cpp项目,errors如下图:
3.2 解决方案
log4cpp对snprintf做了重新定义,但vs2015已自带snprintf函数。分析log4cpp中自带的snprintf.c,其中有如下代码片段(Line517 - Line523):
/*
* If the system does have snprintf and the portable routine is not
* specifically required, this module produces no code for snprintf/vsnprintf.
*/
#if !defined(HAVE_SNPRINTF) || defined(PREFER_PORTABLE_SNPRINTF)
由代码及注释部分可知,若定义了 HAVE_SNPRINTF 宏,即可禁用这段代码。【项目属性 - C/C++ - 预处理器】中添加宏,如下图:
再次编译,成功!
还没有评论,来说两句吧...