码迷,mamicode.com
首页 > 其他好文 > 详细

acl 的编译与使用

时间:2015-05-12 15:11:43      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:

      acl 库的功能参见文章 acl介绍 及 https://github.com/zhengshuxin/acl,本文主要讲述如何编译和使用 acl 库。

      acl 下其实有四个库:lib_acl (基础库)、lib_protocol(http 和 icmp 协议库)、lib_acl_cpp(封装了 lib_acl 和 lib_protocol 两个 C 库的 C++ 版本实现,更是增加了丰富的功能)、lib_dict(封装了 bdb, cdb, Tokyo Cabinet 库的用于字典查询的库)以及 lib_tls(封装了openssl部分功能的库,主要用于 lib_acl 的 ssl 加密传输)。其中,笔者用的最多还是 lib_acl 、lib_protocol 以及 lib_acl_cpp(目前用得最多的库)三个库,所以本文主要介绍这三个库的编译与使用。

      开始时 acl 库是支持 Linux、Solaris、FreeBSD 和 Windows 平台的,其它几个平台欢迎读者进行移植。

 

      一、Linux/UNIX 平台上编译(需要使用 gcc/g++编译器及 gnu make 命令)

      1、编译 lib_acl.a 库(使用 gcc 编译器)

      进入 lib_acl 目录,直接运行 make,正常情况下便可在 lib 目录下生成 lib_acl.a 静态库,用户在使用 lib_acl.a 编写自己的程序时,需要在自己的 Makefile 文件中添加如下选项:

      1.1、编译选项:-I 指定 lib_acl.a 头文件所在目录(头文件在 lib_acl/include 目录下),-DLINUX2 指定 Linux 平台

      1.2、链接选项:-L 指定 lib_acl.a 所在目录,-l_acl 指定需要链接 lib_acl.a 库

      1.3、用户需要在自己的源程序中包含 lib_acl 的头文件,如下:

       #include "lib_acl.h"

 

       2、编译 lib_protocol.a 库(使用 gcc 编译器)

       进入 lib_protocol 目录,直接运行 make,正常情况下便可以在 lib 目录下生成 lib_protocol.a 静态库,用户在使用 lib_protocol.a 编写自己的程序时,需要在自己的 Makefile 文件中添加如下选项:

       2.1、编译选项:-I 指定 lib_protocol.a 头文件目录(在 lib_protocol/include 目录下),-DLINUX2 指定 Linux 平台

       2.2、链接选项:-L 指定 lib_protocol.a 所在目录,-L 指定 lib_acl.a 所在目录,-l_protocol -l_acl

       2.3、用户需要在自己的应用程序中包含 lib_protocol 头文件,如下:

       #include "lib_protocol.h"

 

      3、编译 lib_acl_cpp.a 库(使用 g++ 编译器)

      进入 lib_acl_cpp 目录,运行 make static 编译 lib_acl_cpp.a 静态库,便可 lib 目录下生成 lib_acl_cpp.a,用户在使用 lib_acl_cpp.a 编写程序时,需要在自己的 Makefile 文件中添加如下选项:

      3.1、编译选项:-I 指定 lib_acl_cpp.a 头文件目录(在 lib_acl_cpp/include 目录下),-DLINUX2 指定 Linux 平台

      3.2、链接选项:-L 指定 lib_acl_cpp.a 所在目录,-L 指定 lib_protocol.a 所在目录,-L 指定 lib_acl.a 目录,

               如:-L./lib_acl_cpp/lib -l_acl_cpp -L./lib_protocol/lib -l_protocol -L./lib_acl/lib -l_acl,一定要注意这三个库的依赖关系:lib_protocol.a 依赖于 lib_acl.a,lib_acl_cpp.a 依赖于 lib_protocol.a 及 lib_acl.a,在使用 g++ 进行编译时必须保证库的依赖顺序,被依赖的库总是应放在后面,否则在链接程序时会报函数不存在。

      3.3、用户需要在自己的应用中包含 lib_acl.hpp 头文件,如下:

      #include "acl_cpp/lib_acl.hpp"

      如果程序仅用到了 lib_acl_cpp.a 库中类及函数,则只需要包含 lib_acl_cpp.a 的头文件即可,至于该库所依赖的 lib_protocol.a 及 lib_acl.c 库的头文件已经做了特殊隐含处理,不必显式包含。

 

      二、Windows 平台

      2.1 编译(vc2003/vc2008/vc2010/vc2012)

      在 acl 项目的根目录下,多个 VC 的工程文件,用户可根据自身需要打开工程文件:acl_cpp_vc2003.sln,acl_cpp_vc2008.sln,acl_cpp_vc2010.sln,acl_cpp_vc2012.sln(最早也支持VC6)。用户可以选择编译 lib_acl、lib_protocol、lib_acl_cpp 的静态库调试版、静态库发布版、动态库调试版以及动态库发布版,编译完成后,会在 acl\dist\lib\win32 目录生成的静态库有:

      lib_acl_vc20xxd.lib、lib_acl_vc20xx.lib、lib_protocol_vc20xxd.lib 和 lib_protocol_vc20xx.lib;
      生成的与动态库相关的文件有:lib_acl_d.dll/lib_acl_d.lib,lib_acl.dll/lib_acl.lib,lib_protocol_d.dll/lib_protocol_d.lib,lib_protocol.dll/lib_protocol.lib,lib_acl_cpp_d.dll/lib_acl_cpp_d.lib,lib_acl_cpp.dll/lib_acl_cpp.lib。

 

      2.2 使用

      a)在 win32 平台下使用 lib_acl 和 lib_protocol 静态库时,只需要在包含目录中添加 lib_acl/include、lib_protocol/include 以及 lib_acl_cpp/include 所在的路径,在链接时指定静态库路径及静态库名称。

      b)在 win32 平台下使用 lib_acl 的动态库时,不仅要做与 a) 中所指定的操作,而且需要在预处理器定义中添加:ACL_DLL;在使用 lib_protocol 的动态库,需要在预处理器定义中添加:HTTP_DLL 和 ICMP_DLL;在使用 lib_acl_cpp 的动态库时,需要在预处理器定义中添加:ACL_CPP_DLL

 

      三、 注意事项

      因为 lib_acl 是最基础的库,而 lib_protocol 依赖于 lib_acl,lib_acl_cpp 依赖于 lib_protocol 和 lib_acl,所在生成动态库时,需要注意生成顺序,编译顺序为:lib_acl,lib_protocol,lib_acl_cpp。

 

原文件地址:http://zsxxsz.iteye.com/blog/1535688

acl 的编译与使用

标签:

原文地址:http://www.cnblogs.com/codingking/p/4497146.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!