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 ...
随机推荐
- Java_Activiti5_菜鸟也来学Activiti5工作流_之初识常用服务类和数据表(二)
/** * 代码清单中使用 ProcessEngines类加载默认的流程配置文件(activiti.cfg.xml),再获取各个服务组件的实例. * RepositoryService主要用于管理流程 ...
- AndroidManifest.xml--android系统权限定义
1. 系统编译结束自动生成的java类,描述系统所有定义的权限 out/target/common/R/android/Manifest.java 2. 权限检查方法 frameworks/base/ ...
- SQL SERVER字符集的研究(中英文字符集,varchar,nvarchar).
一. 试验归类测试SQL: drop table a )) insert into a values('a') insert into a values(N'a') insert into a val ...
- .Net framework.
Figure 1 - .Net Framework The Common Language Runtime (CLR) is the mechanism through which .NET code ...
- Objective - C 中NSString (字符串)与C中的字符串转换问题
NSString是一个常用的类,NSString是原生支持unicode C中的字符串 比如char * a = "hello world"; 是utf8类型的, char* d ...
- async await的前世今生
async 和 await 出现在C# 5.0之后,给并行编程带来了不少的方便,特别是当在MVC中的Action也变成async之后,有点开始什么都是async的味道了.但是这也给我们编程埋下了一些隐 ...
- spring配置中引入properties
<context:property-placeholder location="classpath*:db.properties" />
- 百度地图实现车辆轨迹移动播放(baidu map api)
开发技术:jquery,js baidu map api,json,ajax QQ1310651206
- java之两个字符串的比较
compareTo() 的返回值是int, 它是先比较对应字符的大小(ASCII码顺序)1.如果字符串相等返回值02.如果第一个字符和参数的第一个字符不等,结束比较,返回他们之间的差值(ascii码值 ...
- DOM对象控制HTML无素——详解2
节点属性 在文档对象模型 (DOM) 中,每个节点都是一个对象.DOM 节点有三个重要的属性 : 1. nodeName : 节点的名称 2. nodeValue :节点的值 3. nodeType ...