Cgroup学习之——Ubuntu下交叉编译ARM平台libcgroup工具
cgroup系列文章:https://blog.csdn.net/Vince_/article/details/89070001
libcgroup包含cgroup用户空间工具套件(如lscgroup,lssubsys等)以及静态或者动态库,以供其他程序调用,并且包含debug套件。在学习cgroup以及Docker等内容的过程中非常有用,其编译过程总结如下
1. 下载libcgroup-0.41.tar.xz软件包
下载路径如下:
- https://sourceforge.net/projects/libcg/
2. 安装交叉编译工具
平台
Ubuntu-18.04,用了MacBook Pro2017 Touch Bar版本的硬件平台,安装了最新稳定发布版Ubuntu
Host
aarch64架构,用Qemu虚拟环境,自己交叉编译的Linux运行,将编译的工具打包到文件系统即可
博主使用了aarch64架构的交叉变异工具进行试验,对应其他架构如arm或者powerpc等,可以同样下载安装对应的交叉编译工具。编译工具binutils-aarch64-linux-gnu,gcc-aarch64-linux-gnu和g++-aarch64-linux-gnu,在Ubuntu-18.04上默认会安装gcc-7版本,注意此处必须要另外安装g++-aarch64-linux-gnu软件包,编译过程中需要用到g++,否则会出错。
- sudo apt install binutils-aarch64-linux-gnu
- sudo apt install gcc-aarch64-linux-gnu
- sudo apt install g++-aarch64-linux-gnu
3. 将软件包解压并进入目录
- xz -d libcgroup-0.41.tar.xz
- tar -xf libcgroup-0.41.tar
- cd libcgroup-0.41
4. 配置并进行编译
主要有四个步骤:
4.1 安装依赖包
- sudo apt install automake m4 libtool bison flex
4.2 执行configure文件生成Makefile
- $ CC=aarch64-linux-gnu-gcc CROSS_COMPILE=aarch64-linux-gnu- CXX=aarch64-linux-gnu-g++ ./configure --prefix /media/hugo/kston/source/libcgroup-0.41/_install --disable-pam --host aarch64-linux-gnu
4.3 编译
- make
4.4 安装
- make install
其中configure的时候需要配置相应的选项,可以根据环境以及需要配置,有问题可以直接查看help信息。执行完上面的步骤之后就可以在前面的--prefix指定的安装路径找到所有安装文件。博主指定了/media/hugo/kston/source/libcgroup-0.41/_install,安装大家根据自己的环境可以指定对应的路径并在其中找到编译结果安装文件。
编译可能遇到的问题
1. configure时功能不支持问题
log如下:
checking for pam_syslog in -lpam... no
configure: error: Cannot compile PAM module without libpam!
通过查看help可以看到该功能相关信息:
--enable-pam-module-dir=PATH
specify location of libcgroup PAM module
(default=$libdir/security)
查看help的方式如下:
- ./configure --help
解决方式:./configure 添加 --disable-pam 选项注释掉该功能
2. 修改了configure.in或者configure.am
直接编译会出错:
CDPATH="${ZSH_VERSION+.}:" && cd . && /bin/bash /media/hugo/kston/source/libcgroup-0.41/missing aclocal-1.13
/media/hugo/kston/source/libcgroup-0.41/missing: line 81: aclocal-1.13: command not found
WARNING: 'aclocal-1.13' is missing on your system.
You should only need it if you modified 'acinclude.m4' or
'configure.ac' or m4 files included by 'configure.ac'.
The 'aclocal' program is part of the GNU Automake package:
<http://www.gnu.org/software/automake>
It also requires GNU Autoconf, GNU m4 and Perl in order to run:
<http://www.gnu.org/software/autoconf>
<http://www.gnu.org/software/m4/>
<http://www.perl.org/>
Makefile:397: recipe for target 'aclocal.m4' failed
make: *** [aclocal.m4] Error 127
需要在修改之后重新生成配置信息:
- autoreconf -ivf
3. 如果autoreconf出错
需要安装libtool工具:
- sudo apt install libtool
4. 出现函数未定义的问题
log如下:
CCLD cgrulesengd
cgrulesengd.o: In function `cgre_store_unchanged_process':
/media/hugo/kston/source/libcgroup-0.41/src/daemon/cgrulesengd.c:310: undefined reference to `rpl_realloc'
cgrulesengd.o: In function `cgre_store_parent_info':
/media/hugo/kston/source/libcgroup-0.41/src/daemon/cgrulesengd.c:223: undefined reference to `rpl_realloc'
../../src/.libs/libcgroup.a(api.o): In function `cg_test_mounted_fs':
/media/hugo/kston/source/libcgroup-0.41/src/api.c:1085: undefined reference to `rpl_malloc'
../../src/.libs/libcgroup.a(api.o): In function `cg_set_control_value':
/media/hugo/kston/source/libcgroup-0.41/src/api.c:1387: undefined reference to `rpl_malloc'
这是因为在配置中对相应的malloc和realloc函数进行了重定义AC_FUNC_MALLOC和AC_FUNC_REALLOC注释掉,执行autoreconf操作之后再次编译即可
5. 编译出现File format wrong问题
log如下:
CCLD libcgrouptest01
CXX libcg_ba.o
CXXLD libcg_ba
/usr/bin/ld: ../src/.libs/libcgroup.a(api.o): Relocations in generic ELF (EM: 183)
/usr/bin/ld: ../src/.libs/libcgroup.a(api.o): Relocations in generic ELF (EM: 183)
/usr/bin/ld: ../src/.libs/libcgroup.a(api.o): Relocations in generic ELF (EM: 183)
/usr/bin/ld: ../src/.libs/libcgroup.a(api.o): Relocations in generic ELF (EM: 183)
/usr/bin/ld: ../src/.libs/libcgroup.a(api.o): Relocations in generic ELF (EM: 183)
/usr/bin/ld: ../src/.libs/libcgroup.a(api.o): Relocations in generic ELF (EM: 183)
/usr/bin/ld: ../src/.libs/libcgroup.a(api.o): Relocations in generic ELF (EM: 183)
../src/.libs/libcgroup.a: error adding symbols: File in wrong format
collect2: error: ld returned 1 exit status
Makefile:733: recipe for target 'libcg_ba' failed
make[3]: *** [libcg_ba] Error 1
make[3]: Leaving directory '/media/hugo/kston/source/libcgroup-0.41/tests'
Makefile:850: recipe for target 'all-recursive' failed
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory '/media/hugo/kston/source/libcgroup-0.41/tests'
Makefile:471: recipe for target 'all-recursive' failed
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory '/media/hugo/kston/source/libcgroup-0.41'
Makefile:376: recipe for target 'all' failed
make: *** [all] Error 2
通过./configure --help可以看到有一些交叉编译符号需要设置,此处CXXLD识别不了文件格式,打印文件格式错误,所以应该设置该符号重新编译,即在./configure过程中指定
- CXX=aarch64-linux-gnu-g++
重新执行configure过程后make编译
6. 此时出现新的问题
log如下
checking whether we are cross compiling... configure: error: in `/media/hugo/kston/source/libcgroup-0.41':
configure: error: cannot run C++ compiled programs.
If you meant to cross compile, use `--host'.
See `config.log' for more details
看起来在交叉编译时需要指定其他参数,如--host,表示目标文件需要执行的平台,而通过--help信息也可以看到configure对相关交叉编译选项的说明,指定平台信息:
- --host aarch64-linux-gnu
重新编译通过
7. 通过--prefix指定文件安装路径
在进行make install将编译目标安装到对应路径,如果不存在路径,则会自动创建
$ ls -l _install/
total 20
drwxr-xr-x 2 hugo hugo 4096 3月 30 22:34 bin
drwxr-xr-x 3 hugo hugo 4096 3月 30 22:34 include
drwxr-xr-x 3 hugo hugo 4096 3月 30 22:34 lib
drwxr-xr-x 2 hugo hugo 4096 3月 30 22:34 sbin
drwxr-xr-x 3 hugo hugo 4096 3月 30 22:34 share
文件信息如下:
$ tree _install/{bin,lib,sbin}
_install/bin
├── cgclassify
├── cgcreate
├── cgdelete
├── cgexec
├── cgget
├── cgset
├── cgsnapshot
├── lscgroup
└── lssubsys
_install/lib
├── libcgroup.la
├── libcgroup.so -> libcgroup.so.1.0.41
├── libcgroup.so.1 -> libcgroup.so.1.0.41
├── libcgroup.so.1.0.41
└── pkgconfig
└── libcgroup.pc
_install/sbin
├── cgclear
├── cgconfigparser
└── cgrulesengd
1 directory, 17 files
Cgroup学习之——Ubuntu下交叉编译ARM平台libcgroup工具相关推荐
- ubuntu下交叉编译arm内核模块
安装编译环境及下载交叉编译工具: 1 2 3 4 5 apt-get install gcc make pkg-config git bison flex libelf-dev libssl-dev ...
- ubuntu下交叉编译环境构建
ubuntu下交叉编译环境构建(arm-linux-gcc-3.4.1.tar.bz2 ) 下载arm-linux-gcc-3.4.1.tar.bz2到任意的目录下. arm-linux-gcc-3. ...
- Ubuntu下非常给力的下载工具–aira2
Windows下的下载工具--迅雷,之所以下载速度快,乃是它能搜索资源.为己所用,而不是仅仅从原始地址这单一资源处下载.Ubuntu下也有类似的工具,那就是aira2. aira2是一个命令行下载工具 ...
- Ubuntu下很给力的下载工具
Windows下的下载工具--迅雷,之所下面载速度快,乃是它能搜索资源.为己所用,而不是只从原始地址这单一资源处下载. Ubuntu下也有类似的工具,那就是aira2. aira2是一个命令行下载工具 ...
- Ubuntu下非常给力的下载工具--uget+aria2
参考:http://burner1024.blog.163.com/blog/static/17447800420126191858424/ Windows下的下载工具--迅雷,之所以下载速度快,乃是 ...
- ubuntu下U盘刻录工具,用来刻录windows系统
ubuntu下U盘刻录工具,用来刻录windows系统 2014-02-15 18:24 a244798739 | 浏览 3636 次 多媒体软件 2014-02-15 19:24 提问者采纳 不需要 ...
- arm qt mysql插件_Ubuntu下编译ARM平台Qt的MySQL插件
最近需要将一个程序移植到arm平台上,程序调用了MySQL数据库,所以就牵扯到将MySQL数据库移植到ARM平台上面,所以在网上大量查阅资料.在baidu文库发现了一篇文档,是wlzxlc上传的文档名 ...
- openssl 的编译(linux、Ubuntu) 和 交叉编译(arm、Hi3531A)的问题分析、解决
目录 一.编译环境及准备材料 二.Ubuntu下编译openssl 三.交叉编译 openssl 一.编译环境及准备材料 1.编译环境: 1.1.Ubuntu环境 - ubuntu 14.04.1 $ ...
- arm体系结构与编程_教程:如何学习嵌入式系统(基于ARM平台)
一.嵌入式系统的概念 着重理解"嵌入"的概念 主要从三个方面上来理解. 1.从硬件上,将基于CPU的处围器件,整合到CPU芯片内部,比如早期基于X86体系结构下的计算机,CPU只是 ...
- 如何学习嵌入式系统(基于ARM平台)
一.嵌入式系统的概念 着重理解"嵌入"的概念 主要从三个方面上来理解. 1.从硬件上,将基于CPU的处围器件,整合到CPU芯片内部,比如早期基于X86体系结构 ...
最新文章
- 六一:如何在Datawhale开源学习小程序中管
- 记录Android Studio项目提交到github上的出错处理
- 安卓手机可以用python编程软件-可以在手机上进行Java,Python的编程软件,你用过么?...
- 联系人排序java代码_Android仿微信联系人按字母排序_脚本之家
- 第十五章 异常检测-机器学习老师板书-斯坦福吴恩达教授
- 2020元旦快乐!简单粗暴自动化免费文档存储备份方案
- python matplotlib.pyplot.show() plt.show()(显示一个图表)
- 脚注交叉引用序号不一样_期末干货|蛋黄君的论文不秃头指南
- idea中删除java类并提交_IDEA 删除java类的3种提示
- 《大数据》第1期“聚焦”——对大数据的再认识
- AjaxControltoolkit学习笔记—Animation使用详解
- 深度学习中的自动编码器:TensorFlow示例
- Atitit 定时器在项目的应用于 servless数据库 atikvdb 目录 1.1. 项目背景	1 1.2. 特点::免驱动。简单快捷。。	1 1.3. 功能指标	1 1.4. 模块与功能实
- win2008 server 多IP配置
- Linux 快捷键总结
- OpenSIPS实战(一):OpenSIPS使用简介
- 单片机发射红外c语言程序,基于单片机的红外发射C语言程序
- Yang不等式,Hölder不等式与闵可夫斯基(Minkowski)不等式
- chromium 浏览器多进程架构小科普
- Mysql支持translate函数吗_oracle 中的translate函数