当前位置: 首页 > news >正文

交叉编译 acl

交叉编译 acl

概述

访问控制列表(Access Control Lists,ACL)是应用在路由器接口的指令列表。在 Linux 系统中,ACL 用于设定用户针对文件的权限,而不是在交换路由器中用来控制数据访问的功能(类似于防火墙)。

可以从 https://savannah.nongnu.org/projects/acl 获取 ACL 源码。

acl
同时 ACL 也提供了 git 仓库进行代码管理与开发。

  • 网址:https://savannah.nongnu.org/projects/acl
  • git:https://git.savannah.nongnu.org/cgit/acl.git

下载

开发版本 (最新)

如果以研究学习为目的,或者希望尝试最新特性,又或者希望参与到 acl 的开发中,可以直接从 git 上拉取最新源码,拉取命令:

git clone https://git.savannah.nongnu.org/git/acl.git

发行版本

如果以商用量产为目的,一般选择正式的发行版本为佳。在 acl 的 Download 页面,源码以压缩包的形式提供,根据需求选择合适的版本进行下载,以 2.3.1 为例,下载源码包 acl-2.3.1.tar.gz.

也可以直接使用 wget 命令下载:

wget http://download.savannah.nongnu.org/releases/acl/acl-2.3.1.tar.gz

交叉编译

解压缩源码包,如果使用 git clone 拉回来的代码可以忽略这一步

tar -xvf acl-2.3.1.tar.gz

解压缩源码包之后可以先阅读 README 文档,从源码包的文件结构来看,acl 使用的是 ./configure, make, make install 的编译方法,经典的 UNIX 软件部署模式。

依赖关系:

在 acl 的文档及配置文件中有提及到依赖关系,最主要的是依赖 attr 库,完整编译可以先参考「交叉编译 attr」。需要注意的点就是,需要使用 make DESTDIR=$BUILDSYSROOT install 将编译产物部署到 sysroot 目录便于 acl 依赖,效果类似于 apt install *-dev 安装开发依赖包。

首先创建一个环境配置文件 aarch64-environment-setup,配置最重要的交叉编译环境变量。

aarch64-environment-setup:

export TOOLCHAIN_ROOT=/opt/toolchains/aarch64--glibc--stable-2022.03-1
export BUILDSYSROOT=$TOOLCHAIN_ROOT/aarch64-buildroot-linux-gnu/sysroot
export PATH=$TOOLCHAIN_ROOT/bin:$PATHexport PREFIX=/usrexport CC="aarch64-linux-gcc --sysroot=$BUILDSYSROOT"
export CXX="aarch64-linux-g++ --sysroot=$BUILDSYSROOT"
export CPP="aarch64-linux-gcc -E --sysroot=$BUILDSYSROOT"
export LD="aarch64-linux-ld --sysroot=$BUILDSYSROOT"
export AR=aarch64-linux-ar
export AS=aarch64-linux-as
export NM=aarch64-linux-nm
export GDB=aarch64-linux-gdb
export OBJDUMP=aarch64-linux-objdump
export OBJCOPY=aarch64-linux-objcopy
export RANLIB=aarch64-linux-ranlib
export READELF=aarch64-linux-readelf
export STRIP=aarch64-linux-stripexport CONFIGURE_FLAGS="--target=aarch64-linux --host=aarch64-linux --build=x86_64-linux --with-sysroot=$BUILDSYSROOT"export PKG_CONFIG_SYSROOT_DIR=$BUILDSYSROOT
export PKG_CONFIG_PATH=$BUILDSYSROOT/usr/lib/pkgconfig:$BUILDSYSROOT/usr/share/pkgconfig

在本示例中,交叉编译工具位于 /opt/toolchains/aarch64--glibc--stable-2022.03-1/bin 目录下,将该目录配置到 PATH 环境变量,让系统能够正确搜索到。同时在配置 CCCXXCPPLD 环境变量时指定 --sysroot=<dir> 参数让交叉编译器搜索 dir 目录下的头文件与库文件,而不是 /usr/include/usr/lib

source aarch64-environment-setup
./configure --prefix=/usr $CONFIGURE_FLAGS
make
make DESTDIR=$BUILDSYSROOT install-strip
  • 在源码目录下创建环境设置文件并调用 source 命令让环境变量生效
  • 执行源码包的 configure 文件,带上 --prefix 参数,指定安装路径。在配置文件中定义了临时的 CONFIGURE_FLAGS 来指定 --host--build 选项的值,具体的说明可以使用 ./configure --help 命令进行查阅
  • 执行 make 命令编译源码
  • 使用 DESTDIR 参数作为安装目标文件的前缀变量,后面带上你希望安装到的文件夹路径,在本示例中,BUILDSYSROOT 指的是交叉编译工具链的 sysroot 目录,此环境变量在 aarch64-environment-setup 中已定义。更详细介绍可以参考 DESTDIR 官方介绍,也可以参考我的博文《交叉编译 libcap》关于 DESTDIR 的用法说明。

最终你就可以在 $BUILDSYSROOT/usr 文件夹中找到交叉编译好的 acl 的头文件及库文件。Good luck.

欢迎关注我的公众号:飞翔的小黄鸭
也许会发现不一样的风景


△\triangle 交叉编译 attr

http://www.lryc.cn/news/18559.html

相关文章:

  • wait/notify方法 等待唤醒机制
  • c++笔记之构造函数中的default作用
  • 【代码随想录二刷】Day24-回溯-C++
  • Kubernetes中YAML 文件简介
  • 骨传导耳机是怎么发声的,骨传导耳机值得入手嘛
  • 会声会影2023官方新功能介绍
  • vue:pdf.js使用细节/隐藏按钮/设置、获取当前页码/记录阅读进度/切换语言(国际化)
  • RocketMQ实现延迟队列精确到秒级实现
  • 线性数据结构:数组 Array
  • 大数据开发-Hive
  • 《程序员新声》-Tech Lead 如何带领团队
  • 每日算法面试题
  • 高质量前端之自动化测试
  • 2023不伤人脉的全新商城分销,一劳永逸的消费分红
  • 【代码随想录训练营】【Day21】第六章|二叉树|530.二叉搜索树的最小绝对差|501.二叉搜索树中的众数|236. 二叉树的最近公共祖先
  • leaflet 导出图片,打印图片(A4横版或竖版)
  • Java面向对象:继承特性的学习
  • 问答系统(QA)调研
  • 商务租车的三大优势吸引企业以租代购
  • 蓝桥杯的比赛流程和必考点
  • 【数据结构】红黑树
  • 从C++的角度理解C#的Event
  • 商城进货记录交易-课后程序(JAVA基础案例教程-黑马程序员编著-第七章-课后作业)
  • 【正点原子FPGA连载】第十七章双核AMP实验 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南
  • 内存管理框架---页(一)
  • 华为OD机试真题Python实现【流水线】真题+解题思路+代码(20222023)
  • 「JVM 编译优化」Graal 编译器
  • 蓝牙标签操作指南
  • 嵌入式 Linux Shell编程
  • Web前端学习:一