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 ...
随机推荐
- require.js优化器
项目发布前,require.js优化器可以合并require.js各个模块. 官网: http://requirejs.org/docs/optimization.html 安装 npm instal ...
- (tomcat访问不了的两种解决方法)Bad Request(Invalid Hostname)
显示这个页面的时候一般有几中解决方法: 第一种就是如下图所示的方法: 具体步骤是: 1.也就是左下角win的“运行”中输入cmd进入doc窗口中 2.输入代码:netstat -ano 3.找到占用8 ...
- logic:present 和 logic:empty的用法 (转)
logic:empty和logic:notEmpty logic:empty标签判断脚本变量是否为null,是否是一个空的字符串(长度为0),是否是一个空的collection或map(调用isEmp ...
- ArcMap - 分割.
一,分割面: 1,在屏幕上新增线分割面: 使待编辑的面处于编辑状态 -> 选择待分割的面(使其处于选中状态) -> 选择编辑工具的 (Cut Polygons Tools) ->画线 ...
- 动软代码生成器三层用于winform
DBUtility项目中的DbHelperSQL.cs (找自己对应的数据库类型) 修改前20行中的数据库连接字符串获取方式为: //数据库连接字符串(web.config来配置),多数据库可使用Db ...
- ResultSetMetaData rsmd = rs.getMetaData()是什么意思?
ResultSetMetaData rsmt=rs.getMetaData(); 得到结果集(rs)的结构,比如字段数.字段名等.使用rs.getMetaData().getTableName(1)) ...
- 限制UITextField/UITextView的输入字数与中文输入之后的英文换行问题
要限制一个UITextField/UITextView的输入字数,首先想到的应该是通过UITextFieldDelegate/UITextViewDelegate的代理方法来限制,那么如何来更好的限制 ...
- angular.js 字符串
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script sr ...
- css media
/* media */ /* 横屏 */ @media screen and (orientation:landscape){ } /* 竖屏 */ @media screen and (orient ...
- 【vc】1_Windows程序内部运行机制
创建一个Win32应用程序步骤: 1.编写WinMain函数; 2.创建窗口(步骤如下): a.设计(一个)窗口类(WNDCLASS) b.注册(该)窗口类. c.创建窗口. d.显示并更新窗口. 3 ...