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 ...
随机推荐
- Asp.net中向前端输出JS的一些调用
最近突然写ASP.NET项目,用到向前台输出JS脚本,但是以前在MVC里是通过异步或者一些方法来调用,但是ASP.net用到的很少.在网上找到一个HELPER.CS.保存一下,以后再用. using ...
- hive hbase pig 区别
参考文档http://www.linuxidc.com/Linux/2014-03/98978.htm
- eclipse代码注释的设置
http://blog.csdn.net/shiyuezhong/article/details/8450578 1. eclipse用户名的设置: 在eclipse的安装路径下,打开eclipse. ...
- C#中的Dictionary字典类介绍
Dictionary字典类介绍 必须包含名空间System.Collection.Generic Dictionary里面的每一个元素都是一个键值对(由二个元素组成:键和值) 键必须是 ...
- How to customize authentication to my own set of tables in asp.net web api 2?
ssuming your table is called AppUser, convert your own AppUser domain object to IUser(using Microsof ...
- WCF系列学习5天速成
看到一篇比较好的基础wcf学习博客,分享给大家:http://www.cnblogs.com/huangxincheng/archive/2011/10/23/2221845.html
- 层模型--绝对定位(position:absolute)
如果想为元素设置层模型中的绝对定位,需要设置position:absolute(表示绝对定位),这条语句的作用将元素从文档流中拖出来,然后使用left.right.top.bottom属性相对于其最接 ...
- Linux删除用户
删除用户 # userdel abc 该删除操作将用户删除但保留用户的home文件夹和邮件文件夹.并且当用户abc正在登录的时候,删除操作将失败,如下: # userdel abc userdel: ...
- 如何自定义RecycleView item的间距
引言 在以前使用ListView和GridView时,设置item之间的间距还是相对比较简单的,因为它们的基本属性里面Android已经定义好了,可以直接设置属性值即可.但Google为了通用性和灵活 ...
- Linux系统管理技术手册——第6章 添加新用户
6.1/etc/passwd文件 用户登录时Linux识别用户的文件/etc/passwd /etc/passwd包括7个字段: 登录名(不超过32位,使用NIS系统后不超过8位) 经过加密的口令或口 ...