ELFUtils
1.1、ELFUtils简介
是什么 ?:a collection of utilities and libraries to read, create and modify ELF binary files, find and handle DWARF debug data, symbols, thread state and stacktraces for processes and core files onGNU/Linux.
开发语言:C
官方主页:https://sourceware.org/elfutils
1.2、通过包管理器安装ELFUtils
操作系统包管理器安装命令
aptsudo apt-get install -y elfutils
CentOSyumsudo yum install -y elfutils
dnfsudo dnf install -y elfutils
openSUSEzyppersudo zypper install -y elfutils
Alpine Linuxapksudo apk add elfutils

Arch Linux

ArcoLinux

Manjaro Linux

pacmansudo pacman -Syyu --noconfirm
sudo pacman -S    --noconfirm elfutils
Gentoo LinuxPortagesudo emerge elfutils
1.3、通过源码安装ELFUtils 

step1、安装依赖

下载时cURL
解压时tarbzip2
编译时POSIX shGNU CoreUtilsmakegcc
运行时
  • glibc ( libc.sold-linux-x86-64.so )

step2、使用curl命令下载ELFUtils源码包 (

curl -LO https://sourceware.org/elfutils/ftp/0.178/elfutils-0.178.tar.bz2

step3、使用tar解压ELFUtils源码包

tar vxf elfutils-0.178.tar.bz2

step4、进入elfutils-0.178目录

cd elfutils-0.178

step5、查看elfutils-0.178目录中的内容

step6、创建构建目录,并进入该目录

mkdir build && cd build

step7、使用../configure配置编译参数

../configure是一个可执行的POSIX sh脚本,用它 配置后会产生make的配置文件Makefile

../configure的使用格式如下:

./configure [option]... [VAR=VALUE]...
option说明
--help    | -h查看../configure的使用帮助
--version | -V查看../configure是哪个版本的autoconf生成的
--quiet   | -q | --silent不输出checking...这些信息
--prefix=DIR设置安装目录。默认是/usr/local/
--host=HOST
设置目标程序运行的CPU平台
一般不需要设置,除非你想要交叉编译
默认与与宿主机一样
--enable-FEATURE[=yes|no]
yes:开启FEATURE
no :关闭FEATURE
--enable-dependency-tracking[=yes|no]是否开启依赖追踪
--enable-option-checking[=yes|no]是否检查有无不认识的--enable-FEATURE--with-PACKAGE参数
--enable-silent-rules[=yes|no]
yes相当于make V=0
no 相当于make V=1
--enable-nls[=yes|no]是否支持Native Language Support
--enable-largefile[=yes|no]是否支持大文件(超过2GB)
--enable-gprof[=yes|no]是否支持gprof
--enable-gcov[=yes|no]是否支持gcov
--enable-valgrind[=yes|no]是否支持Valgrind
--enable-valgrind-annotations[=yes|no]是否支持Valgrindannotations
--enable-install-elfh[=yes|no]是否安装elf.h
--enable-debuginfod[=yes|no]是否编译debuginfod,依赖BinUtils >=2.34
--enable-sanitize-undefined[=yes|no]是否开启编译器Undefined Behavior Sanitizer特性
--with-PACKAGE[=yes|no]
yes: 使用PACKAGE
no:不使用PACKAGE
--with-valgrind[=DIR]设置Valgrind的头文件所在路径
--with-zlib[=DIR]设置zlib的所在位置
--with-bzlib[=DIR]设置bzip2libbz2)的所在位置
--with-lzma[=DIR]设置xzliblzma)的所在位置

注意:

enable-FEATURE对应的选项,还有disable-FEATUREdisable-FEATURE相当于enable-FEATURE=no

with-PACKAGE对应的选项,还有without-PACKAGEwithout-PACKAGE相当于with-PACKAGE=no

示例:

../configure --prefix=/usr

step8、使用make进行编译

make [option]... [VAR=VALUE]...
VARVALUE示例说明
CCgcc |  clang指定C编译器命令
CFLAGS-O2 -v指定C编译器命令的参数
CXXg++ |  clang++指定C++编译器命令
CXXFLAGS-O2 -v指定C++编译器命令的参数
CPPcpp指定C预处理器命令
CPPFLAGS-I<includeDir>指定C预处理器命令的参数
LDFLAGS-L<libDir>指定C链接器命令的参数
LIBS-l<libName>指定C链接器要链接的库的名称
YACC/usr/bin/yacc指定yacc命令的路径。通常使用Bison实现
YFLAGS设置yacc命令的参数

示例:

CPUCoreCount=$(grep -c processor /proc/cpuinfo)
jobCount=$((CPUCoreCount + 1))

make -j${jobCount} CFLAGS="-O2 -v"

step9、安装

sudo make install
1.4、ELFUtils中包含的命令
1.5、ELFUtils中包含的头文件
1.6、ELFUtils中包含的库文件
  • libasm.{a | so}
  • libdw.{a | so}
  • libelf.{a | so}