开篇提示:本文为本人原创,本文欢迎转载,但必须注明本文出处,例如。
“该文引用自 CruiseYoung的:Visual Studio 2013编译log4cplus http://blog.csdn.net/fksec/article/details/38418809”否则说明阁下愿意支付以100元人民币每字计的稿费,敬请留意。
1 前期准备
1.1 C++11特性支持Visual C++ Compiler November 2013 CTP (for Visual Studio 2013)下载页面:http://www.microsoft.com/en-us/download/details.aspx?id=41151直接地址:http://download.microsoft.com/download/3/C/2/3C271B79-6354-4B66-9014-C6CEBC14C5C4/vc_CompilerCTP.Nov2013.exe注1:Visual C++ Compiler November 2012 CTP (for Visual Studio 2012)下载页面:http://www.microsoft.com/en-us/download/details.aspx?id=35515直接地址:http://download.microsoft.com/download/5/1/6/5169AA1E-D7A4-4DC2-A9AE-0A9DFD2601AB/vc_compilerCTPNov2012.exe1.2 官方信息官网地址:http://sourceforge.net/p/log4cplus/wiki/Home/API地址(只针对稳定版):http://log4cplus.sourceforge.net/docs/html/index.html代码托管地址:https://github.com/log4cplus/log4cplus
2 编译
2.1 如果想用最新的版本,例如当前最新版本号为“log4cplus 1.2.0-RC2”,且不想用c++11特性,请在下载页面点击“branch:master”-->“Branches”-->“1.2.x”,。编译过程如下:2.1.1 “开始”菜单-->“所有程序”-->“附件”-->“命令提示符”;2.1.2 切换到目录log4cplus-1.2.x\msvc10;cd /d E:\Projects\compile\log4cplus-1.2.x\msvc102.1.3 执行以下命令;..\scripts\msvc10_to_msvc12.cmd log4cplus.sln2.1.4 从新生成的文件夹“log4cplus-1.2.x\msvc12”中打开解决方案“log4cplus.sln”;2.1.5 温馨提示:如果没有安装“QT4”或“QT5”,请卸载相应工程“Qt4DebugAppender”或“Qt5DebugAppender”;2.1.6 编译;注: 步骤2.1.1至2.1.4来源于“log4cplus-1.2.x\README.md”的提示。2.2 如果想用最新的版本,且想用c++11特性,请下载“Branches”值为“master”的代码。编译过程如下:2.2.1 安装Visual C++ Compiler November 2013 CTP (for Visual Studio 2013)2.2.2 ( 经本人上报库开发者,该bug已修复,请跳过)打开“log4cplus\src\socket.cxx”文件,因为“std::array<std::ptrdiff_t, 2> interruptHandles”在ServerSocket的复制构造函数处初始化方式在VS IDE环境下不识别,作如下修改:将, interruptHandles { -1, -1 }改为, #ifdef _MSC_VER interruptHandles{ { -1, -1 } } #else interruptHandles{ -1, -1 } #endif2.2.3 ( 经本人上报库开发者,该bug已修复,请跳过)打开解决方案“log4cplus\msvc12\log4cplus.sln”,点击“解决方案资源管理器”-->“log4cplus”工程-->“helpers”-->“logloguser.h”和“logloguser.cxx”-->右键“从项目中排除(J)”;用同样的方法,将“log4cplusS”工程中的“logloguser.h”和“logloguser.cxx”,右键“从项目中排除(J)”,否则会产生如下错误:“error C1083: Cannot open source file: '..\src\logloguser.cxx': No such file or directory”;2.2.4 解决关键字不可识别“constexpr”问题:在完成2.2.1的前提下,将以下项目:log4cplus log4cplusS configandwatch_test configandwatch_testS filter_test filter_testS performance_test performance_testS propertyconfig_test propertyconfig_testS作如下更改:
“属性”-->“配置(C)” 选择“所有配置”-->“平台(P)”选择“所有平台”-->“配置属性”-->“常规”-->“常规”-->“平台工具集”选择“Visual C++ Compiler Nov 2013 CTP(CTP_Nov2013)”;
由于log4cplus的编译,默认为msvc14(Visual Studio 2015),所以需讲所有工程的“平台工具集”改为“Visual C++ Compiler Nov 2013 CTP(CTP_Nov2013)”;或者安装Microsoft Visual Studio 2015。2.2.5 温馨提示:如果没有安装“QT4”或“QT5”,请卸载相应工程“Qt4DebugAppender”或“Qt5DebugAppender”;2.2.6 编译;
2.3 库文件提取(本人没有提取Unicode版本的库):mkdir D:\comm\log4cplus mkdir D:\comm\log4cplus\include mkdir D:\comm\log4cplus\x64 mkdir D:\comm\log4cplus\x64\lib mkdir D:\comm\log4cplus\x64\lib\debug mkdir D:\comm\log4cplus\x64\bin mkdir D:\comm\log4cplus\x64\bin\debug mkdir D:\comm\log4cplus\x64_static mkdir D:\comm\log4cplus\x64_static\lib mkdir D:\comm\log4cplus\x64_static\lib\debug mkdir D:\comm\log4cplus\Win32 mkdir D:\comm\log4cplus\Win32\lib mkdir D:\comm\log4cplus\Win32\lib\debug mkdir D:\comm\log4cplus\Win32\bin mkdir D:\comm\log4cplus\Win32\bin\debug mkdir D:\comm\log4cplus\Win32_static mkdir D:\comm\log4cplus\Win32_static\lib mkdir D:\comm\log4cplus\Win32_static\lib\debug xcopy /E /H /R .\include\* D:\comm\log4cplus\include copy /Y msvc12\x64\bin.Release\log4cplus.dll D:\comm\log4cplus\x64\bin copy /Y msvc12\x64\bin.Release\log4cplus-CLFSAppender.dll D:\comm\log4cplus\x64\bin copy /Y msvc12\x64\bin.Release\log4cplus-MSTTSAppender.dll D:\comm\log4cplus\x64\bin copy /Y msvc12\x64\bin.Release\log4cplus.lib D:\comm\log4cplus\x64\lib copy /Y msvc12\x64\bin.Release\log4cplus.pdb D:\comm\log4cplus\x64\lib copy /Y msvc12\x64\bin.Release\log4cplus-CLFSAppender.lib D:\comm\log4cplus\x64\lib copy /Y msvc12\x64\bin.Release\log4cplus-clfsappender.pdb D:\comm\log4cplus\x64\lib copy /Y msvc12\x64\bin.Release\log4cplus-MSTTSAppender.lib D:\comm\log4cplus\x64\lib copy /Y msvc12\x64\bin.Release\log4cplus-msttsappender.pdb D:\comm\log4cplus\x64\lib copy /Y msvc12\x64\bin.Release\log4cplusS.lib D:\comm\log4cplus\x64_static\lib copy /Y msvc12\x64\bin.Release\log4cpluss.c.pdb D:\comm\log4cplus\x64_static\lib copy /Y msvc12\x64\bin.Debug\log4cplusD.dll D:\comm\log4cplus\x64\bin\debug copy /Y msvc12\x64\bin.Debug\log4cplus-CLFSAppender.dll D:\comm\log4cplus\x64\bin\debug copy /Y msvc12\x64\bin.Debug\log4cplus-MSTTSAppender.dll D:\comm\log4cplus\x64\bin\debug copy /Y msvc12\x64\bin.Debug\log4cplusD.lib D:\comm\log4cplus\x64\lib\debug copy /Y msvc12\x64\bin.Debug\log4cplusD.pdb D:\comm\log4cplus\x64\lib\debug copy /Y msvc12\x64\bin.Debug\log4cplus-CLFSAppender.lib D:\comm\log4cplus\x64\lib\debug copy /Y msvc12\x64\bin.Debug\log4cplus-clfsappender.pdb D:\comm\log4cplus\x64\lib\debug copy /Y msvc12\x64\bin.Debug\log4cplus-MSTTSAppender.lib D:\comm\log4cplus\x64\lib\debug copy /Y msvc12\x64\bin.Debug\log4cplus-msttsappender.pdb D:\comm\log4cplus\x64\lib\debug copy /Y msvc12\x64\bin.Debug\log4cplusSD.lib D:\comm\log4cplus\x64_static\lib\debug copy /Y msvc12\x64\bin.Debug\log4cplussd.c.pdb D:\comm\log4cplus\x64_static\lib\debug copy /Y msvc12\Win32\bin.Release\log4cplus.dll D:\comm\log4cplus\Win32\bin copy /Y msvc12\Win32\bin.Release\log4cplus-CLFSAppender.dll D:\comm\log4cplus\Win32\bin copy /Y msvc12\Win32\bin.Release\log4cplus-MSTTSAppender.dll D:\comm\log4cplus\Win32\bin copy /Y msvc12\Win32\bin.Release\log4cplus.lib D:\comm\log4cplus\Win32\lib copy /Y msvc12\Win32\bin.Release\log4cplus.pdb D:\comm\log4cplus\Win32\lib copy /Y msvc12\Win32\bin.Release\log4cplus-CLFSAppender.lib D:\comm\log4cplus\Win32\lib copy /Y msvc12\Win32\bin.Release\log4cplus-clfsappender.pdb D:\comm\log4cplus\Win32\lib copy /Y msvc12\Win32\bin.Release\log4cplus-MSTTSAppender.lib D:\comm\log4cplus\Win32\lib copy /Y msvc12\Win32\bin.Release\log4cplus-msttsappender.pdb D:\comm\log4cplus\Win32\lib copy /Y msvc12\Win32\bin.Release\log4cplusS.lib D:\comm\log4cplus\Win32_static\lib copy /Y msvc12\Win32\bin.Release\log4cpluss.c.pdb D:\comm\log4cplus\Win32_static\lib copy /Y msvc12\Win32\bin.Debug\log4cplusD.dll D:\comm\log4cplus\Win32\bin\debug copy /Y msvc12\Win32\bin.Debug\log4cplus-CLFSAppender.dll D:\comm\log4cplus\Win32\bin\debug copy /Y msvc12\Win32\bin.Debug\log4cplus-MSTTSAppender.dll D:\comm\log4cplus\Win32\bin\debug copy /Y msvc12\Win32\bin.Debug\log4cplusD.lib D:\comm\log4cplus\Win32\lib\debug copy /Y msvc12\Win32\bin.Debug\log4cplusD.pdb D:\comm\log4cplus\Win32\lib\debug copy /Y msvc12\Win32\bin.Debug\log4cplus-CLFSAppender.lib D:\comm\log4cplus\Win32\lib\debug copy /Y msvc12\Win32\bin.Debug\log4cplus-clfsappender.pdb D:\comm\log4cplus\Win32\lib\debug copy /Y msvc12\Win32\bin.Debug\log4cplus-MSTTSAppender.lib D:\comm\log4cplus\Win32\lib\debug copy /Y msvc12\Win32\bin.Debug\log4cplus-msttsappender.pdb D:\comm\log4cplus\Win32\lib\debug copy /Y msvc12\Win32\bin.Debug\log4cplusSD.lib D:\comm\log4cplus\Win32_static\lib\debug copy /Y msvc12\Win32\bin.Debug\log4cplussd.c.pdb D:\comm\log4cplus\Win32_static\lib\debug
3 用配置方式使用log4cplus所相关的重要文件
log4cplus\include\log4cplus\layout.h中头注释描述
log4cplus\include\log4cplus\configurator.h中头注释描述
log4cplus\src\patternlayout.cxx整个文件,特别是函数:void PatternParser::finalizeConverter(tchar c)
log4cplus\src\fileappender.cxx中函数static tstring preprocessDateTimePattern(const tstring& pattern, DailyRollingFileSchedule& schedule)
log4cplus\src\factory.cxx中函数void initializeFactoryRegistry()
C++头文件ctime中的strftime()函数