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工具相关推荐

  1. ubuntu下交叉编译arm内核模块

    安装编译环境及下载交叉编译工具: 1 2 3 4 5 apt-get install gcc make pkg-config git bison flex libelf-dev libssl-dev ...

  2. ubuntu下交叉编译环境构建

    ubuntu下交叉编译环境构建(arm-linux-gcc-3.4.1.tar.bz2 ) 下载arm-linux-gcc-3.4.1.tar.bz2到任意的目录下. arm-linux-gcc-3. ...

  3. Ubuntu下非常给力的下载工具–aira2

    Windows下的下载工具--迅雷,之所以下载速度快,乃是它能搜索资源.为己所用,而不是仅仅从原始地址这单一资源处下载.Ubuntu下也有类似的工具,那就是aira2. aira2是一个命令行下载工具 ...

  4. Ubuntu下很给力的下载工具

    Windows下的下载工具--迅雷,之所下面载速度快,乃是它能搜索资源.为己所用,而不是只从原始地址这单一资源处下载. Ubuntu下也有类似的工具,那就是aira2. aira2是一个命令行下载工具 ...

  5. Ubuntu下非常给力的下载工具--uget+aria2

    参考:http://burner1024.blog.163.com/blog/static/17447800420126191858424/ Windows下的下载工具--迅雷,之所以下载速度快,乃是 ...

  6. ubuntu下U盘刻录工具,用来刻录windows系统

    ubuntu下U盘刻录工具,用来刻录windows系统 2014-02-15 18:24 a244798739 | 浏览 3636 次 多媒体软件 2014-02-15 19:24 提问者采纳 不需要 ...

  7. arm qt mysql插件_Ubuntu下编译ARM平台Qt的MySQL插件

    最近需要将一个程序移植到arm平台上,程序调用了MySQL数据库,所以就牵扯到将MySQL数据库移植到ARM平台上面,所以在网上大量查阅资料.在baidu文库发现了一篇文档,是wlzxlc上传的文档名 ...

  8. openssl 的编译(linux、Ubuntu) 和 交叉编译(arm、Hi3531A)的问题分析、解决

    目录 一.编译环境及准备材料 二.Ubuntu下编译openssl 三.交叉编译 openssl 一.编译环境及准备材料 1.编译环境: 1.1.Ubuntu环境 - ubuntu 14.04.1 $ ...

  9. arm体系结构与编程_教程:如何学习嵌入式系统(基于ARM平台)

    一.嵌入式系统的概念 着重理解"嵌入"的概念 主要从三个方面上来理解. 1.从硬件上,将基于CPU的处围器件,整合到CPU芯片内部,比如早期基于X86体系结构下的计算机,CPU只是 ...

  10. 如何学习嵌入式系统(基于ARM平台)

    一.嵌入式系统的概念        着重理解"嵌入"的概念 主要从三个方面上来理解.     1.从硬件上,将基于CPU的处围器件,整合到CPU芯片内部,比如早期基于X86体系结构 ...

最新文章

  1. 六一:如何在Datawhale开源学习小程序中管
  2. 记录Android Studio项目提交到github上的出错处理
  3. 安卓手机可以用python编程软件-可以在手机上进行Java,Python的编程软件,你用过么?...
  4. 联系人排序java代码_Android仿微信联系人按字母排序_脚本之家
  5. 第十五章 异常检测-机器学习老师板书-斯坦福吴恩达教授
  6. 2020元旦快乐!简单粗暴自动化免费文档存储备份方案
  7. python matplotlib.pyplot.show() plt.show()(显示一个图表)
  8. 脚注交叉引用序号不一样_期末干货|蛋黄君的论文不秃头指南
  9. idea中删除java类并提交_IDEA 删除java类的3种提示
  10. 《大数据》第1期“聚焦”——对大数据的再认识
  11. AjaxControltoolkit学习笔记—Animation使用详解
  12. 深度学习中的自动编码器:TensorFlow示例
  13. Atitit 定时器在项目的应用于 servless数据库 atikvdb 目录 1.1. 项目背景 1 1.2. 特点::免驱动。简单快捷。。 1 1.3. 功能指标 1 1.4. 模块与功能实
  14. win2008 server 多IP配置
  15. Linux 快捷键总结
  16. OpenSIPS实战(一):OpenSIPS使用简介
  17. 单片机发射红外c语言程序,基于单片机的红外发射C语言程序
  18. Yang不等式,Hölder不等式与闵可夫斯基(Minkowski)不等式
  19. chromium 浏览器多进程架构小科普
  20. Mysql支持translate函数吗_oracle 中的translate函数

热门文章

  1. 无法验证的代码未能通过策略检查
  2. 程序员揭秘 一些鲜为人知的编程真相
  3. 企业搜索 Solr7 安装部署
  4. MarkDown说明
  5. 详解卷积神经网络(CNN)在语音识别中的应用
  6. Python 常用函数Logging
  7. 一道容易栽坑的有趣的面试题(关于js,定时器,闭包等)
  8. 探究CSS中border-top属性的使用
  9. Spark SQL External Data Sources JDBC官方实现写测试
  10. Oracle RAC系列之:ASM基本操作维护