类库大魔王
类库大魔王 多年一线C++、Go项目经验,长期从事跨平台(Windows/macOS/iOS/Android)应用架构设计与开发。

编译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文件了。

感觉本文不错,不妨小额鼓励我一下!
如果你有Visa、MasterCard之类的国际银行卡,也可以考虑以下选项:
comments powered by Disqus