编译log4cxx

  突发奇想,想编译log4cxx来试试。在官方网站上只看得到0.9.7的源代码包,这个源代码包是有VC工程文件的,可以直接用VC.NET2003打开升级工程文件进行编译,最后生成.lib和.dll文件来用。不过这不是我的目标,我想编译的是直接从SVN里取出来的代码,其实是偶然间看到硬盘上好久以前写的一个从SVN里CO出log4cxx源代码的批处理文件,里面只有一行内容:svn co http://svn.apache.org/repos/asf/logging/log4cxx/trunk loggin-log4cxx,随手点了一下就把文件都取下来了。看了它的INSTALL说明,就很想把它编译出来。
  编译需要用ANT,要是在不久之前,我肯定直接放弃,不过前些日子搞CruiseControl时,也看了几行ANT脚本,至少知道ANT是用来做像make那样的事的。刚好CruiseControl中带了一个1.7.0版本的ANT,满足它1.6.1的要求。还需要cpptasks.jar和ant-contrib.jar,可以到http://sourceforge.net/project/showfiles.php?group_id=36177下载,解压到ANT的lib目录下即可。接下来需要apr和apr-util,不知道这是干什么的,但反正编译时会去找它们,把它们的源代码和编译好的二进制文件都下载来,因为我尝试用VC2003直接编译它们的源代码并不能正常通过,所以也懒得弄了,把源代码分别解压出来,命名为apr和apr-util,再到它们的include文件夹中,把几个后缀为.hw的文件复制一份后缀改为.h。
  需要准备的东西差不多齐全了,在运行ANT进行编译前,先修改一下build.xml文件,里面有几处名为comment和dependency的节点,注释掉,不知道干什么的,反正我编译的时候这里会报错,注释掉后就能通过了,而且好像对生成的文件没什么影响。再看看该文件中为VC6编译写的一小段配置项说明:
-Ddebug=[true|false]
-Doptimize=[speed|size|none]
-Dversion=n.n.n
-Denable-shared=[yes|no] (default yes)
-Denable-static=[yes|no] (default yes)
-Denable-char=[0, 1] (expose char* API, default 1)
-Denable-wchar_t=[0, 1] (expose wchar_t* API, default 1)
-Denable-unichar=[0, 1] (expose UniChar API, default 0)
-Denable-cfstring[0, 1] (expose CFString API, default 0)
-Dwith-charset=[auto|utf-8|iso-8859-1|usascii|ebcdic] (default auto)
-Dwith-logchar=[utf-8|wchar_t|unichar] (default=utf-8 on Unix, wchar_t on Windows)
-Dwith-apr=APRPATH
-Dwith-apr-util=PATH
-Dwith-SMTP=[libesmtp, no] (default no)
-Dwith-ODBC=[unixODBC, iODBC, Microsoft, no] (default no)
假设需要shared和static两种库,debug和release模式都需要,写个处理:
set CLASSPATH=E:\InstantMantis-1.0.8\server\apache-ant-1.7.0\lib\ant-contrib.jar;E:\InstantMantis-1.0.8\server\apache-ant-1.7.0\lib\cpptasks-1.0b4\cpptasks.jar
call C:\vs%1.bat
call e:\InstantMantis-1.0.8\server\apache-ant-1.7.0\bin\ant.bat -Dwith-apr=H:\libs\loggin-log4cxx\src\apr -Dwith-apr-util=H:\libs\loggin-log4cxx\src\apr-util -Ddebug=false build-all
call e:\InstantMantis-1.0.8\server\apache-ant-1.7.0\bin\ant.bat -Dwith-apr=H:\libs\loggin-log4cxx\src\apr -Dwith-apr-util=H:\libs\loggin-log4cxx\src\apr-util build-all
call e:\InstantMantis-1.0.8\server\apache-ant-1.7.0\bin\ant.bat -Dwith-apr=H:\libs\loggin-log4cxx\src\apr -Dwith-apr-util=H:\libs\loggin-log4cxx\src\apr-util -Ddebug=false -Dlib.type=static build-all
call e:\InstantMantis-1.0.8\server\apache-ant-1.7.0\bin\ant.bat -Dwith-apr=H:\libs\loggin-log4cxx\src\apr -Dwith-apr-util=H:\libs\loggin-log4cxx\src\apr-util -Dlib.type=static build-all
跟build.xml文件放在一起,最后进入到命令行界面,运行这个批处理,它接受一个参数,用来指定使用哪个版本的VC,因为我同时装了6.0/7.1/8.0/9.0,呵呵,把它们的vsvars32.bat都复制一份出来放到C盘根目录,改名为VSx.bat,把各个版本的数字挨个儿运行一遍,就能生成针对各个VC版本的log4cxx库.lib和.dll文件了。

本文地址:

https://minidump.info/blog/2008/03/e7-bc-96-e8-af-91log4cxx/

上一篇

搜了一天简历

  简直想吐啊,太无聊了,又完不成任务,要求那么多,根本是浪费时间嘛。有空写个程序来自己搜简历得了。大概的想法就是调用IE的接口,几乎所有的IE页面上的元素都可以通过COM接口访问到,除了验证码不能自动识别外,其它部分应该都可以用程序完成。另外还有个问题是,输入email和手机号后,要点击一个...…

Job 全文阅读
下一篇

堕落了几天

  这些天为了看一部网络小说,很是堕落啊,还熬过一个通宵,之后就一直没恢复过来,整天昏昏沉沉的。  开源里好东西还真是不少,前些天在公司网上看到有人提到一个libEtPan的库,原来是一个mail库,提供了pop3、imap、smtp、nntp等协议的支持,简单看看觉得还是挺有用的一个东东,可...…

Software 全文阅读