APR可移植运行库简介(2)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一般情况下,APR开发包很容易理解为仅仅是一个开发包,不过事实上并不是。目前,完整的APR实际上包含了三个开发包:apr、apr-util以及apr-iconv,每一个开发包分别独立开发,并拥有自己的版本。
apr开发包位于目录${APR}\apr下,其中包含了一些通用的开发组件,包括mmap,文件等等,前面已经描述过。
apr
|
-> file_io
|
-> unix The Unix and common base code
|
-> win32 The Windows code
apr-util\aprutil.dsp
apr-util\libaprutil.dsp
apr-util\uri\gen_uri_delims.dsp
apr-util\xml\expat\lib\xml.dsp
apr-iconv\apriconv.dsp
apr-iconv\libapriconv.dsp
万事具备,只欠东风。现在你可以编译APR了。你可以选择两种方式,或者是命令行编译,或者是使用IDE编译。
对于Visual C++ 5.0的用户,为了能够使用一些APR中的新特性,你必须更新Windows平台开发包(Windows Platform SDK)。对于Visual C++ 6.0则没有这些多余的事情,因为这些SDK随Visual C++6.0一起发布了。如果没有这些新的SDK,使用MSVC++5.0编译的时候,编译中会出现大量新特性不支持的警告,甚至完全编译失败。至于具体的SDK,你可以到Window的网站上去下载。
Apache APR可移植运行库简介(2) 收藏
转载请注明来源:/tingya
1.3 APR构建
1.3.1获取APR
编译APR的第一个步骤就是获取APR开发包。通常情况下,你可以到APR的官方网站/download.cgi去下载。
All you should have to do is this:
./configure
make
make install
As of this writing, APR is not quite ready to be installed as a system-wide shared library; it currently works best when tied directly to the application using it.
test则是测试程序的目录。每一个APR类型在使用之前都必须经过测试。事实上对于APR的使用者而言,这个目录还有另外的一个好处,就是快速掌握APR类型的使用。每一个测试例子都给出了具体类型的使用方法。
3) 此外就是相关平台构建工具文件如Makefile.in,configure.in等等。
1.3.3APR构建
Note that if you are compiling directly from the SVN repository, you'll need GNU autoconf and GNU libtool installed, and you'll need to run ./buildconf before running the commands listed above.
To compile code for the libraries, the consuming compiliation must include the apr/include and apr-util/include directories in their include file search paths. To target the static .lib versions of the library, the consuming compiliation must define the macros APR_DECLARE_STATIC and APU_DECLARE_STATIC. This prevents the apr and apr-util symbols from being tagged as __declspec(dllimport), eliminating compiliation warnings and speeding up execution.
xlate /srclib/apr-util/xlate i18n 转换库
encoding /srclib/apr-util/encoding 编码转换库,其中实现了各种编码之间的转换
misc /srclib/apr-util/misc 大杂烩
apr-util的当前版本为1.2.2,最早的版本为0.9.1。
|
-> os2 The OS/2 code
在上面的四种子目录中,unix是一个比较特殊的目录。由于Unix的种类很多,比如FreeBSD,Linux等等,原则上应该都为这些平台分别建立各自的子目录,然后分别实现代码。不过所有的Unix都大同小异,如果为了稍许的差异就“大动干戈”,不太划算,因此APR中将所有的Unix的平台的操作合并到一起,而这些平台这些的差异就用前面的预定义宏来区别。目前的unix目录中以POSIX为主,同时兼顾System V。上面的文件I/O操作中明显的缺少了BeOS平台的实现,那是因为BeOS的实现合并到Unix目录中去了。
apr-iconv的当前版本为1.1.1,最早的版本从0.9.2开始。
1.3.2APR的目录组织
从/上下载apr-1.1.1.tar.gz到本地解压后,可以发现APR的目录结构很清晰。
1) 所有的头文件都放在$(APR)/include目录中;
2) 所有功能接口的实现都放在各自的独立目录下,如threadproc、mmap等目录中,而这些目录的子目录中包含实际的实现代码。Apache中划分子目录的根据就是编译代码所在的平台,目前APR能够支持Unix、BeOS、Windows以及OS2四种平台,因此正常情况下,每一个目录中会包含这四个子目录。比如文件I/O的目录就如下所示:
另外两个特殊的目录就是include和test目录了。include目录中包含了所有的外部使用所需要的头文件。其中APR.h和apr_private.h是两个特殊的文件,如果要使用APR,必须包含apr.h头文件。但在原文件中并看不到这两个文件。事实上,这两个文件都是自动生成的。由于windows和netware平台下并不使用autoconf,因此APR在windows和netware平台下的行为与其余所有平台都不相同。在UNIX上,apr_private.h(APR私有文件,仅仅APR内部使用)和apr.h(APR公共文件,可以其余的文件使用)实际上在代码中并不存在,它们都是由autoconf从acconfig.h和apr.h.in中自动生成的。而在Window中,这两个文件都由apr_private.hw(apr_private.hwn)和apr.hw(apr_private.hwn)中自动生成。
crypto /srclib/apr-util/crypto 加密和解密
hooks /srclib/apr-util/hooks apache挂钩
dbd /srclib/apr-util/dbd 数据库连接管理
dbm /srclib/apr-util/dbm
ldap /srclib/apr-util/ldap 轻量级目录访问协议
1.3.3.2 Window平台上编译
The apr-util/aprutil.dsw workspace builds the .dsp projects of the Apache server listed with dependent projects preceeding their dependencies:
apr-util开发包位于目录${APR}\apr-util下,该目录中也是包含了一些常用的开发组件。这些组件与apr目录下的相比,它们与apache的关系更加密切一些。比如存储段和存储段组,加密等等,具体的各个组件的含义如下表所示:
组件名称 文件夹名称 描述
buckets /srclib/apr-util/buckets 存储段和存储段组
在Window平台上要成功编译apr、apr-iconv以及apr-util,必须具备一下的几个条件:
1)、可用的微软编译器:比如微软的Visual C++ 5.0或者更高的版本,比如Visual C++6.0,Microsoft Visual 2002,Microsoft Visual 2003(必须具备Visual C++ .NET编译器)。
在Window和Unix上编译APR的方法不太相同,我们分开来描述。
1.3.3.1 Unix上编译
We've attempted to ensure that compiling apr, apr-iconv and apr-util distribution tarballs requires nothing more than what comes installed by default on various UNIX platforms.
strmatch /srclib/apr-util/strmatch 字符串匹配,包括普通字符串匹配以及正则表达式匹配,正则表达式匹配中使用prec库
uri /srclib/aprFra bibliotekutil/uri uri操作例程
xml /srclib/apr-util/xml xml支持例程,其中使用expat作为xml解析器
apr\apr.dsp
apr\libapr.dsp
The libXXX projects create .dll targets, dynamic shared libraries. Their non-libXXX counterparts create static .lib targets.
除了必要的编译工具之外,APR开发包还必须具备正确地目录布局。apr,apr-util以及apr-iconv必须同时具备,并且它们必须位于同一目录之下,比如:
C:\work\apr\
C:\work\apr-iconv\
C:\work\apr-util\
对于发行版本,直接将发行的文件包解压到指定目录下即可;而对于开发版本,你必须能够从subversion中自行检出,Window平台下,APR推荐的SVN是TortoiseSVN。
apr-iconv包中的文件主要用于实现iconv编码。目前的大部分编码转换过程都是与本地编码相关的。在进行转换之前必须能够正确地设置本地编码。因此如果两个非本地编码A和B需要转换,则转换过程大致为A->Local以及Local->B或者B->Local以及Local->A。
XPG2 标准中另外定义了一组全新的函式接口ICONV,该接口是一种更广义的字集转换系统。也是一个与本地编码无关的字集转换系统。APR中也支持这种字集转换系统,为此它提供了完整的实现。Apr-iconv正是为此目的而产生。
目前最近的APR版本是2.2.0,不过你如果使用老一些的APR,比如1.1.1以前,那么你还需要awk。你可以到/cm/cs/who/bwk/awk95.exe去下载二进制可执行文件。不过从1.1.1以后的版本就可以省去这个麻烦了。
2)、正确的目录布局
相关文档
最新文档