在vs2008中编译log4cxx-0.10.0详细方法(从下载、编译、解决错误详细介绍)
日志库,很多都不错,glog 、log4cplus、log4cpp、log4cxx等。
因为log4cxx是apache的项目,所以情有独钟。但是编译似乎比较麻烦,于是准备用log4cplus。
log4cplus更新挺快的,但是里面只有msvc10的sln。习惯了vs08,尝试修改sln等各种方法也没折腾好。既然麻烦,那干脆还是试用log4cxx算了。呵呵。
于是google得到了一个连接 “在vs2010中编译log4cxx-0.10.0详细方法(从下载、编译、解决错误详细介绍)”
感觉图文并茂,非常不错。
但是中途与他的又有点异同,所以也发表日志记录一下。
编译后文件下载 https://files.cnblogs.com/lovelp/log4cxx_vs08.zip
第一部分:
首先,下载地址:
1. 下载 log4cxx 以及 apr 和 apr-util 源码:
a) http://www.apache.org/dyn/closer.cgi/logging/log4cxx/0.10.0/apache-log4cxx-0.10.0.zip
b) http://archive.apache.org/dist/apr/apr-1.2.11-win32-src.zip
c) http://archive.apache.org/dist/apr/apr-util-1.2.10-win32-src.zip
2. 将 3 个压缩包解压到同一个目录.
3. 将 apr-1.2.11 重命名为 apr, 将 apr-util-1.2.10 重命名为 apr-util. 不然bat运行的时候,会找不到apr-util等路径。
错误提示如下:
文件结构如下:
本来可以直接运行log4cxx下面的configure.bat,但是这个批处理没加pause,执行结果会一闪而过,不知道到底执行的怎么样了,所以还是建议在cmd里面操作。
cmd里面切换路径,其实很方便,参考博文里面的方法其实可以改进一下,具体命令行如下:
cd /d E:\log4cxx\apache-log4cxx-0.10.0
4、然后直接输入 configure.bat 执行
接下来是应该执行 "configure-aprutil.bat",但是里面用到了sed这个linux命令。windows无次命令。
我参考的博文里面,作者没去处理,这里我下载了一个sed for windows。然后把安装后的路径添加到了环境变量里面中了。
关闭cmd,再打开一个新的cmd(让环境变量在cmd里面能用),测试sed是否可用。
sed --help
确定无误。
5、sed准备好了后,接下来执行 configure-aprutil.bat
下面又存在不同点了:
参考博文里面提到要修改 E:\log4cxx\apr-util\include\apu.hw 里面的 #define APU_HAVE_APR_ICONV
我打开的时候发现值是0,不需要改了。可能是sed配置后脚本自动修改过了。
第二部分:
上面准备工作都做好了,现在是万事俱备只欠东风了。打开路径 E:\log4cxx\apache-log4cxx-0.10.0\projects
发现都是vc6的工程。我使用的是vs08. 转换之。
6、使用vs08打开 log4cxx.dsw ,全部转换。
7、将 log4cxx 设置为启动项,生成log4cxx。
接下来,编译途中会出现几行错误:
>network_io\unix\multicast.c(137): error C2079: “mip”使用未定义的struct “group_source_req”错误
双击第一行出错输出, 将 136 和 148 行的 #if MCAST_JOIN_SOURCE_GROUP 注释, 替换为 #if defined
#if defined (group_source_req) //#if MCAST_JOIN_SOURCE_GROUP struct group_source_req mip; int ip_proto; #endif rv = mcast_check_type(sock); if (rv != APR_SUCCESS) { return rv; } if (source != NULL) { //#if MCAST_JOIN_SOURCE_GROUP #if defined (group_source_req)
再次编译,就没有任何错误了。这里我偷懒了,直接【生成】-【批生成】。几分钟后回来,一切顺利。
log4cxx - 0 个错误,0 个警告
========== 全部重新生成: 成功 8 个,失败 0 个,跳过 0 个 ==========
编译后文件下载 https://files.cnblogs.com/lovelp/log4cxx_vs08.zip
配置下include路径后即可开工。
附上代码测试一下,代码来自于网络
#include <iostream> #include <log4cxx/logger.h> #include <log4cxx/basicconfigurator.h> #include <log4cxx/helpers/exception.h> #include <log4cxx/propertyconfigurator.h> #pragma comment(lib,"log4cxx.lib") using namespace std; using namespace log4cxx; using namespace log4cxx::helpers; LoggerPtr logger(Logger::getLogger("R")); LoggerPtr logger_lib_a(Logger::getLogger("Lib_a")); LoggerPtr logger_lib_b(Logger::getLogger("Lib_b")); int main(int argc, char **argv) { try { // Set up a simple configuration that logs on the console. PropertyConfigurator::configure("log4cxx.properties"); for (int i=0 ; i<100;i++) { LOG4CXX_INFO(logger, "测试下 R") LOG4CXX_DEBUG(logger_lib_a, "测试下 R.a") LOG4CXX_DEBUG(logger_lib_b, "测试下 t R.b") } } catch(...) { } cin.get(); return 0; }
新建一个为本文档,改名为"log4cxx.properties",作为属性配置文档,内容如下:
log4j.additivity.gather = false log4j.rootLogger= debug, R, stdout #设置子logger log4j.logger.Lib_a =debug, ap1, stdout log4j.logger.Lib_b =debug, ap2, stdout #设置不继承父Logger log4j.additivity.Lib_a=false log4j.additivity.Lib_b=false log4j.appender.logfile.encoding=UTF-8 #标准输出,向控制台打印 log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n #Root log4j.appender.R=org.apache.log4j.RollingFileAppender log4j.appender.R.File=./info.log log4j.appender.R.MaxFileSize=100KB log4j.appender.R.MaxBackupIndex=10 log4j.appender.R.layout=org.apache.log4j.PatternLayout log4j.appender.R.layout.ConversionPattern=%d [%c]-[%p] %m%n log4j.appender.ap1=org.apache.log4j.RollingFileAppender log4j.appender.ap1.File=./hello_a.log log4j.appender.ap1.MaxFileSize=100KB log4j.appender.ap1.MaxBackupIndex=10 log4j.appender.ap1.layout=org.apache.log4j.PatternLayout log4j.appender.ap1.layout.ConversionPattern=%d{yyyy-MM-dd} [%c]-[%p] %m%n log4j.appender.ap2=org.apache.log4j.RollingFileAppender log4j.appender.ap2.File=./hello_b.log log4j.appender.ap2.MaxFileSize=100KB log4j.appender.ap2.MaxBackupIndex=10 log4j.appender.ap2.layout=org.apache.log4j.PatternLayout log4j.appender.ap2.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n
编译后文件下载 https://files.cnblogs.com/lovelp/log4cxx_vs08.zip