log4cxx在vs2013的静态编译
网络上找了一圈,结果都是通过修改代码来编译,做为强迫症患者接受不了这种修改代码却无法预知代码带来影响的方式,而且没有静态编译的方法,为了方便其他人后续不在走弯路,提供自己的编译方法。
虽然最终的目的是相同,但是风险却不同,往往风险却是最致命的,就算只是一个概率很低的风险。
进入主题,需要准备的东西:
1、windows的操作系统,这个没有的话你可以不用看了,下面的不适合你。
2、vs2013,当然你不想用2013的话,后面的方法只是参考,不能确保会有其他问题。当然你和我一样有强迫症,恭喜你,你可以对着来折腾。
3、log4cxx源码,传送门:http://logging.apache.org/log4cxx/download.html
4、log4cxx依赖的apache的组件apr和apr-util,传送门:http://apr.apache.org/download.cgi
操作步骤:
1、将3个压缩包(log4cxx、apr、apr-util)解压到同一个目录,建议目录不要使用中文,未测试(但是中文路径一直是开发人员的痛);
2、将apr-XX.XX.XX重命名为apr, 将apr-util-XX.XX.XX 重命名为 apr-util
3、执行apache-log4cxx-0.10.0目录下的configure.bat,目前log4cxx的版本已经在几年前就停止在0.10.0了,不排除后面会更新,别认死理。
4、修改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工具了。
5、打开apache-log4cxx-0.10.0\projects目录下的log4cxx.dsw,转换为目标编译器的项目,并设置log4cxx为启动项目
6、修改log4cxx的属性,c++预处理器定义删除LOG4CXX增加LOG4CXX_STATIC,配置类型为静态库,加入附加依赖项:ws2_32.lib wsock32.lib rpcrt4.lib,不修改预处理器定义会报宏定义的错误,网上我能找到的资料都是直接修改宏定义来完成,不过我通过阅读相关代码发现log4cxx提供了编译宏来处理,所以此处选择修改预处理器定义而不是修改代码;而要编译成静态库,就需要把依赖的windows的库静态链接。
7、修改apr和aprutil的属性,目标文件名由$(ProjectName)改为$(ProjectName)-1,此处网上的资料中未曾提及,却在我编译的时候一直报找不到链接对象,通过分析发现是生成的文件名配置跟生成的实际文件不一致导致,此处未在vs2003和vs2010上测试,有可能是vs2013的规则更严格导致。
8、选择Release编译即可。
如果有更好的方法,欢迎分享,以上个人见解,欢迎拍砖,已自备钢盔。
如果有不明白的地方欢迎沟通交流,如果需要转载,麻烦标注来源。
log4cxx在vs2013的静态编译的更多相关文章
- QT5.4.2静态编译(包含QtWebKit),在VS2013上创建项目,并成功运行
Qt项目发布的exe程序,默认是以动态链接形式的,这样发布后的程序会附带好多Qt自己的dll库,这样文件数量不仅多,而且移植到其他电脑上的时候,还可能会遇到,提示缺其他库等各种运行不起 ...
- Qt 5.6.2 静态编译(VS2013 x86 target xp openssl icu webkit)
在去年4月份的时候,我写过一篇动态编译Qt5.6.0的文章,当时是为了解决webkit不能在winxp下面跑的问题,动态编译有一个缺点,就是发布的时候,要携带一大堆dll,使安装包的体积增大.而静态编 ...
- QT5.7静态编译(使用VS2013与VS2015编译,XP可用,有详细configure脚本。VS下Qt插件的配置。编译选项加上-mp可以开启多线程编译,编译速度提高2倍以上)
http://blog.csdn.net/u011964923/article/details/52886908 configure -confirm-license -opensource -pla ...
- QT5.4 vs2013静态加载插件的sqlite静态编译
1. 非常多同学在静态编译QT5完毕后, sqlite的驱动老是载入不进去, 原因可能是由于你没有例如以下操作: #include <QtPlugin> Q_IMPORT_PLUGIN(Q ...
- 静态编译Qt5.4.1和Qt WebKit
图灵社区文章地址:http://www.ituring.com.cn/article/195148WebKit是个好东西,做爬虫.显示网页还是想用HTML来做桌面应用的界面都可以用他,不过一直以来都觉 ...
- 静态编译Qt5.4.1和Qt WebKit(网事如风的blog)good
blog文章地址:http://godebug.org/index.php/archives/133/ WebKit是个好东西,做爬虫.显示网页还是想用HTML来做桌面应用的界面都可以用他,不过一直以 ...
- Qt5.5.0在Windows下静态编译(修改参数以后才能支持XP)good
测试系统环境: windows 7 编译软件环境: vs2013 + QT5.5.0 [源码地址:http://download.qt.io/official_releases/qt/5.5/5.5. ...
- 静态编译 Qt 5.6
源码下载 Qt git地址:git://code.qt.io/qt/qt5.git 推荐用 SourceTree 客户端来克隆源码 准备工作 系统 Windows 7 或者 Windows 10 编译 ...
- openal-1.13 静态编译(mingw32)
1.CMakeLists.txt SET(LIBTYPE SHARED) 改成 SET(LIBTYPE STATIC) 2.include/al/al.h 删除 dllexport 3.include ...
随机推荐
- JavaScript 使用
HTML 中的脚本必须位于 <script> 与 </script> 标签之间. 脚本可被放置在 HTML 页面的 <body> 和 <head> 部分 ...
- Unity3D GUI之自定义风格组件
GUI中可以使用一些默认的组件,里面的最后一个参数一般情况下,不设置就是默认的 ,当然也可以进行手动的指定,比如: GUI.Button(new Rect(0,0,100,100),"开始游 ...
- asp.net数据导出到excel表格,并设置表格样式
1.首先在项目中添加引用
- ORACLE用户管理方式下备份数据和复制数据库
首先要明确的是,oracle数据库的备份可以分为逻辑备份和物理备份. 逻辑备份的是通过数据导出对数据进行备份,主要方式有老式的IMP/EXP和数据泵灯方式.适合变化较少的数据库,而 ...
- oracle解析xml(增加对9i版本的支持)
--方法1 SELECT * FROM XMLTABLE('$B/DEAL_BASIC/USER_DEAL_INFO' PASSING XMLTYPE('<?xml version= ...
- java_设计模式_工厂模式_Factory Pattern(2016-08-04)
工厂模式主要是为创建对象提供了接口.工厂模式按照<Java与模式>中的提法分为三类: (1)简单工厂(Simple Factory)模式,又称静态工厂方法模式(Static Factory ...
- free 堡垒机
环境: centos6.5 mini安装 iptables selinux已经关闭 jumpserver: 192.168.1.209 testserver: 192.168.1.210 一. 部署l ...
- zTree异步生成数据时无法获取到子节点的选中状态
最近在项目中遇到一个问题,需求如下: 根据选中不同的人员(ID)向后台发送ajax请求,通过返回的数据来生成该人员的权限访问树,该树目录最少为3级目录,在生成的时候会自动勾选上次保存过的选中状态,点击 ...
- 如何正确的使用uwsgi
简单的安装过程可以在这里找到,这里主要说一下如何配置uwsgi的服务,将uwsgi服务加入系统进程,你可以使用如下两种方式安装 apt-get apt-get install uwsgi 该命令会自动 ...
- Nopcommerce架构浅谈之文件结构
应该是在两年前了,在拜读园子里大神的文章时偶然了解到有个叫NopCommerce的商城系统,苦于没有时间,各种耽误,其中研究过一段时间,也就是一个星期时间,后来又耽搁了,直到最近,随着项目进入间歇期, ...