log4cxx在vs2013的静态编译

网络上找了一圈,结果都是经过修改代码来编译,作为强迫症患者接受不了这种修改代码却没法预知代码带来影响的方式,并且没有静态编译的方法,为了方便其余人后续不在走弯路,提供本身的编译方法。html

虽然最终的目的是相同,可是风险却不一样,每每风险倒是最致命的,就算只是一个几率很低的风险。c++

 

进入主题,须要准备的东西:
一、windows的操做系统,这个没有的话你能够不用看了,下面的不适合你。apache


二、vs2013,固然你不想用2013的话,后面的方法只是参考,不能确保会有其余问题。固然你和我同样有强迫症,恭喜你,你能够对着来折腾。windows


三、log4cxx源码,传送门:http://logging.apache.org/log4cxx/download.html 网络


四、log4cxx依赖的apache的组件apr和apr-util,传送门:http://apr.apache.org/download.cgi工具

 

操做步骤:
一、将3个压缩包(log4cxx、apr、apr-util)解压到同一个目录,建议目录不要使用中文,未测试(可是中文路径一直是开发人员的痛);测试


二、将apr-XX.XX.XX重命名为apr, 将apr-util-XX.XX.XX 重命名为 apr-utilspa


三、执行apache-log4cxx-0.10.0目录下的configure.bat,目前log4cxx的版本已经在几年前就中止在0.10.0了,不排除后面会更新,别认死理。操作系统


四、修改apr-util\include\apr_ldap.hw的APR_HAS_LDAP宏定义为0,修改apr-util\include\apu.hw的APU_HAVE_APR_ICONV宏定义为0,此步由于windows上没有sed命令的支持,直接执行log4cxx目录下的configure-aprutil.bat会无效。不过好在configure-aprutil.bat作的事情简单,咱们就手动代替。不然只能装sed for windows工具了。htm


五、打开apache-log4cxx-0.10.0\projects目录下的log4cxx.dsw,转换为目标编译器的项目,并设置log4cxx为启动项目


六、修改log4cxx的属性,c++预处理器定义删除LOG4CXX增长LOG4CXX_STATIC,配置类型为静态库,加入附加依赖项:ws2_32.lib wsock32.lib rpcrt4.lib,不修改预处理器定义会报宏定义的错误,网上我能找到的资料都是直接修改宏定义来完成,不过我经过阅读相关代码发现log4cxx提供了编译宏来处理,因此此处选择修改预处理器定义而不是修改代码;而要编译成静态库,就须要把依赖的windows的库静态连接。


七、修改apr和aprutil的属性,目标文件名由$(ProjectName)改成$(ProjectName)-1,此处网上的资料中不曾说起,却在我编译的时候一直报找不到连接对象,经过分析发现是生成的文件名配置跟生成的实际文件不一致致使,此处未在vs2003和vs2010上测试,有多是vs2013的规则更严格致使


八、选择Release编译便可。


若是有更好的方法,欢迎分享,以上我的看法,欢迎拍砖,已自备钢盔。


若是有不明白的地方欢迎沟通交流,若是须要转载,麻烦标注来源。