您当前的位置:首页 > 边玩边学 > windows下log4cpp编译方法 网站首页 边玩边学
windows下log4cpp编译方法
发布时间:2020-12-31 10:59:24编辑:阅读()
-
log4cpp是一款类似于log4j、log4net的日志记录工具。log4cpp在c++程序维护、调试中有很大的作用,支持日志分级别过滤、日志文件分割,但是log4cpp并没有提供windows版本编译后的dll动态库,这篇文章主要介绍如何在windows中通过visual studio进行编译log4cpp。
1、源码下载
从sourceforge下载log4cpp源码https://sourceforge.net/projects/log4cpp/files/log4cpp-1.1.x%20%28new%29/log4cpp-1.1/选择第一个下载频次最高的那个2、源码编译
解压上一步下载的压缩包log4cpp-1.1.3.tar.gz得到log4cpp文件夹这里使用visual studio 2017来编译,其他版本方法应该也类似,假设visual studio已经安装好了1)sln解决方案工程升级
进入log4cpp\msvc10文件夹,通过visual studio 2017打开msvc10.sln工程文件会提示“解决方案”升级,使用默认设置直接点“确定”按钮即可2)mc文件编译设置
在visual studio的资源管理器中,在log4cpp工程中找到NTEventLogCategories.mc文件,在该文件上点右键选择属性在“配置属性-->自定义生成工具-->常规-->命令行”中修改编译命令,设置为如下命令if not exist $(OutDir) md $(OutDir)mc.exe -h $(OutDir) -r $(OutDir) $(ProjectDir)..\%(Filename).mcRC.exe -r -fo $(OutDir)%(Filename).res $(OutDir)%(Filename).rclink.exe /MACHINE:IX86 -dll -noentry -out:$(OutDir)NTEventLogAppender.dll $(OutDir)%(Filename).res使用同样的方法对log4cppRunnable工程也做同样的设置3)snprintf预编译设置
由于log4cpp中对snprintf进行了重新实现,visual studio的c库对snprintf也有实现,windows中在链接时会报snprintf函数冲突,所以需要设置log4cpp的预编译项,选择使用visual stuido中c库的实现在log4cpp工程上点右键选属性在”配置属性-->C/C++-->预处理器-->预处理器定义"中增加一条预处理定义HAVE_SNPRINTF使用同样的方法对log4cppRunnable工程也做同样的设置4)代码语法错误修改
由于gcc和visual studio语法有略微区别,需要对testDailyRollingFileAppender的testDailyRollingFileAppender.cpp文件中43行进行修改在字符串和宏之间加一个空格修改后内容如下const char* const nesteddirname = "nesteddir" PATHDELIMITER;5)编译
对解决方案进行编译,应该就可以编译成功了
3、常见问题
1、"vsvars32.bat"' 不是内部或外部命令,也不是可运行的程序
错误 unable to open output file - Debug" -r Debug"\NTEventLogCategories.h \log4cpp\msvc10\NTEventLogCategories.mc 1错误 RC1110 could not open Debug\NTEventLogCategories.rc \log4cpp\msvc10\log4cpp\CUSTOMBUILD 1错误 LNK1181 无法打开输入文件“Debug\NTEventLogCategories.res” \log4cpp\msvc10\log4cpp\LINK 1解决方法见上边的 2、源码编译-->2)mc文件编译设置2、snprintf实现冲突
错误 C2084 函数“int snprintf(char *const ,const ::size_t,const char *const ,...)”已有主体 \log4cpp\src\snprintf.c 524错误 C2084 函数“int vsnprintf(char *const ,const ::size_t,const char *const ,va_list)”已有主体 \log4cpp\src\snprintf.c 538解决方法见上边的 2、源码编译-->3)snprintf预编译设置3、字符串常量错误
错误 C3688 文本后缀“PATHDELIMITER”无效;未找到文文本运算符或文本运算符模板“operator """"PATHDELIMITER” testDailyRollingFileAppender \log4cpp\tests\testdailyrollingfileappender.cpp 43错误 C2789 “nesteddirname”: 必须初始化常量限定类型的对象 testDailyRollingFileAppender \log4cpp\tests\testdailyrollingfileappender.cpp 43解决方法见上边的 2、源码编译--> 4)代码语法错误修改4、相关文章链接
关键字词:log4cpp编译方法,visual studio编译log4cpp,log4cpp
上一篇:直播视频会议中H264解码黑屏
下一篇:log4cpp使用方法