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、编译静态库

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

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

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

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

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

#include "lib_acl.h"

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

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

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

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

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

#include "lib_protocol.h"

1.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 文件中添加如下选项:

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

1.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++ 进行编译时必须保证库的依赖顺序,被依赖的库总是应放在后面,否则在链接程序时会报函数不存在。

1.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 库的头文件已经做了特殊隐含处理,不必显式包含。

2、编译动态库

编译 lib_acl.so, lib_protocol.so, lib_acl_cpp.so 的方式与编译静态库的方式有所不同,需要分别进入三个目录执行: make shared rpath=${lib_path},其中 shared 表示需要编译动态库,${lib_path} 需要用实际的目标路径替换,比如:make shared rpath=/opt/acl/lib,则会将动态库编译好后存放于 /opt/acl/lib 目录,编译这三个库的顺序为:lib_acl.so --> lib_protocol.so --> lib_acl_cpp.so。

另外,在编译 lib_acl_cpp.so 时,还需要提前编译在 resource 目录下的 polarssl 库,编译完后再编译 lib_acl_cpp.so 同时需要指定 polarssl.lib 库所在的路径;如果不需要 SSL 通讯方式,则需要打开 lib_acl_cpp/Makefile 文件,去年编译选项:-DHAS_POLARSSL。

应用程序在使用这三个动态库时的头文件的包含方式与静态库的相同,连接动态库的方式与静态库类似,只是将 .a 替换成 .so 即可,同时也要求包含的顺序与上述静态库相同。如:

a、编译时的头文件包含方式:-I/opt/acl/include/acl -I/opt/acl/include/protocol -II/opt/acl/include

b、连接时的库文件包含方式:-L/opt/acl/lib -l_acl_cpp -l_protocol -l_acl

c、运行时的库文件加载方式:-Wl,-rpath,/opt/acl/lib,该参数指定程序运行时需要加载三个动态库的位置在 /opt/acl/lib 目录下。

二、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。

QQ 群:242722074

linux acl库编译与使用,acl 的编译与使用相关推荐

  1. linux acl库编译与使用,acl_cpp 的编译与使用

    注:因为现在 acl_cpp 已经合并进 acl 项目中,本文仅是介绍了老版本的 acl_cpp 的编译过程,新版本的介绍及编译请参考:acl 框架库简介. acl_cpp 是基于 acl 为基础开发 ...

  2. 使用 acl 库编写发送邮件的客户端程序

    2019独角兽企业重金招聘Python工程师标准>>> 邮件做为最早和最广的互联应网用之一,已经与人们的生活息息相关.我们虽然经常使用 Outlook Express/Outlook ...

  3. MFC开发IM-第二十四篇、使用 acl 库针对 C++ 对象进行序列化及反序列编程

    在开发网络应用程序时,各个模块之间的数据通信可谓是家常便饭,为了应对这些数据通信时数据交换的要求,程序员发明了各种数据格式:采用二进制数据结构(早期 C 程序员).采用 XML.采用SOAP(坑人的设 ...

  4. linux 安装库 编译提示-lcrypto 无法链接,缺少 crypto 库

    linux 安装库 缺少 crypto 库 编译提示-lcrypto 无法链接,缺少 crypto 库 方法一 ------------------------------------- crypto ...

  5. Linux下的高级文件权限ACL

    ACL(Access Control List)即访问控制列表.主要是针对单一用户,单一文件或目录进行rwx权限的细部设定.可以针对用户(User).群组(Group).默认属性掩码(mask)进行设 ...

  6. linux易语言安装目录文件,易语言编译linux文件与相关支持库

    引言: 玩了很多年易语言才发现易语言也可以编译linux下的文件,今天就试了试,在网上找了一下,还真的可以,于是收集与整理一下,学好易语言还是挺有用的,感觉. 首先现在易语言创建一个linux 程序. ...

  7. zookeeper的acl权限控制_zookeeper权限acl与四字命令

    权限acl介绍,acl的构成与id acl是Access control lists 的缩写,也就是权限控制列表: 针对节点可以设置相关读写等权限,目的是为了保障数据安全性 权限permissions ...

  8. linux代码动态分析软件,举例分析Linux动态库和静态库

    函数库分为静态库和动态库两种.创建Linux静态库和Linux动态库和使用它们在这里将以举例的形式详述一下.静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库.动态库在程序编译时并不 ...

  9. Linux动态库(.so)搜索路径

    众所周知,Linux动态库的默认搜索路径是/lib和/usr/lib.动态库被创建后,一般都复制到这两个目录中.当程序执行时需要某动态库,并且该动 态库还未加载到内存中,则系统会自动到这两个默认搜索路 ...

最新文章

  1. java程序无法启动_由于Java程序,Tomcat无法启动
  2. python问题:IndentationError:expected an indented block错误解决
  3. 为什么我的电脑上安装不上python-python安装不上
  4. 关键词提取_NLP 关键词 提取 实战 案例
  5. 曼哈顿距离java实现_基于javascript实现获取最短路径算法代码实例
  6. [论文学习]Manifold Mixup和PatchUp的代码重新实现(实现即插即用且速度更快)
  7. Linux的内存理解
  8. c++代码表白_推荐!在浪漫的日子里程序猿如何用C语言实现520表白代码
  9. 软工网络15个人阅读作业2——提问题
  10. 本地搭建wp,更新升级时需要ftp的解决办法
  11. select,epoll的比较
  12. 一牛人总结的开发流程工具组合
  13. LeetCode—数据库简单题(三)
  14. Mysql 中时间日期函数
  15. UITableView 删除cell
  16. appium 常用键盘操作
  17. 使用ARKit编码测量应用程序:对象和阴影
  18. VOT数据集自动/手动下载
  19. 2022跨年烟花代码(三)HTML5点击页面烟花绽放特效
  20. vue的jsx写法记录

热门文章

  1. lucene原理介绍
  2. 小米翻译机闪亮登场,它称得上是便携式“翻译官”吗?
  3. MySQL 数据库 1129错误
  4. 大众点评店铺详情页评论采集(破解css文字映射反爬,包含项目github 可用时间至2020-01-21)
  5. udev(一)-- 什么是udev
  6. idea怎么创建Maven项目以及如何使用
  7. USACO-Bovine Genomics(Silver)
  8. unity的final ik的Hand Poser组件
  9. 个性化推荐算法python实现
  10. C语言 函数指针和指针函数用法