转自:http://blog.csdn.net/kungbx/article/details/6129564
最近一段时间在使用C++写程序,其中需要使用日志功能,便顺手“拿来”了log4cxx。从Apache网站上下载的log4cxx只有源代码,需要自己编译出dll,通过官方文档所说的办法编译,出现了一些小问题,参考了网上“高人”的网文,自己整理了其中的一些错误的解决办法:
1、准备工作
unzip apr-1.2.11-win32-src.zip
rename apr-1.2.11 apr
unzip apr-util-1.2.10-win32-src.zip
rename apr-util-1.2.10 apr-util
cd apache-log4cxx-0.10.0
configure
configure-aprutil
其中执行configure-aprutil时候说sed命令不存在,解决办法:下载sed for windows,并且把bin路径赋值给环境变量PATH。
2、Visual C++ 2010打开log4cxx项目编译
1)通过VC++ 2010打开项目,VC会自动做项目转换,一般来说这里不会出错。接着选择log4cxx为Active Project,编译。出现一大堆错误。主要都是error C2252: an explicit instantiation of a template can only occur at namespace scope这个,解决办法:
#define LOG4CXX_LIST_DEF(N, T) /
template class LOG4CXX_EXPORT std::allocator<T>; /
template class LOG4CXX_EXPORT std::vector<T>; /
typedef std::vector<T> N
替换为
#define LOG4CXX_LIST_DEF(N, T) /
typedef std::vector<T> N
2)编译成功后,链接过程又抛一大堆链接错误,主要说找不要一些obj(apr,apr-util,xml)。解决办法:手动把这些相关项目的LIBD给添上。
3、测试log4cxx的DLL
在测试项目里添加include和lib指向,把dll添加到项目的文件夹里,编写测试cpp文件,编写log4cxx.properties文件,编译运行即可。
test.cpp
log4cxx.properties
参考网文:
1、http://blog.csdn.net/rabbit729/archive/2008/08/05/2772179.aspx
2、http://www.hwcrazy.com/topic.action?idTopic=ff80818129d0e3210129d0e61fb30001#