1. 简介
ABI Compliance Checker (ABI合规性检测器,ABICC) 是一种用于检查 C/C++ 软件库的向后二进制和源代码级兼容性的工具。
该工具分析 API/ABI(ABI = API + 编译器ABI)中可能破坏二进制兼容性和/或源代码兼容性的更改:调用堆栈的更改、v-table 更改、删除的符号、重命名的字段等。
该工具可以创建和比较库的头文件和共享对象的 ABI 转储。 如果共享对象包含 debug-info,库的 ABI 转储也可以由 ABI Dumper 工具 (https://github.com/lvc/abi-dumper) 创建。
该工具适用于对确保向后兼容性感兴趣的软件库开发人员和 Linux 维护人员,即允许旧应用程序运行或使用较新的库版本重新编译。
该工具是 ABI Tracker 和 Upstream Tracker 项目的核心:https://abi-laboratory.pro/tracker/
2. 社区
官方仓库:https://github.com/lvc/abi-compliance-checker
最新版本:2.3(发布时间2018-5-8)
许可协议:LGPL-2.1
开发语言:perl
主作者:Andrey Ponomarenko
更新时间:2020-3-30
官方文档:https://lvc.github.io/abi-compliance-checker/
3. 依赖
- Perl 5
该软件采用perl 5脚本语言开发 - GCC C++ (3.0 or newer)
提供gcc/g++编译命令 - GNU Binutils
提供c++filt、readelf、objdump命令 - Ctags
提供ctags命令 - ABI Dumper (1.1 or newer)
提供abi-dumper命令
4. 使用
abicc提供了三种用法,如下:
4.1. 用法一:借用abi-dumper命令
USAGE #1 (WITH ABI DUMPER):
1. Library should be compiled with "-g -Og" GCC options
to contain DWARF debug info
2. Create ABI dumps for both library versions
using the ABI Dumper (https://github.com/lvc/abi-dumper) tool:
abi-dumper OLD.so -o ABI-0.dump -lver 0
abi-dumper NEW.so -o ABI-1.dump -lver 1
3. You can filter public ABI with the help of
additional -public-headers option of the ABI Dumper tool.
4. Compare ABI dumps to create report:
abi-compliance-checker -l NAME -old ABI-0.dump -new ABI-1.dump
先借用abi-dumper命令对so/ko(库中需要包含debug info信息)生成dump文件, 再通过abicc基于dump文件生成abi变更报表。
缺点:需要依赖abi-dumper工具,同时还要求so/ko携带debug info信息
4.2. 用法二:原始
USAGE #2 (ORIGINAL):
1. Create XML-descriptors for two versions
of a library (OLD.xml and NEW.xml):
<version>
1.0
</version>
<headers>
/path/to/headers/
</headers>
<libs>
/path/to/libraries/
</libs>
2. Compare Xml-descriptors to create report:
abi-compliance-checker -lib NAME -old OLD.xml -new NEW.xml
先配置xml描述文件(包含版本、头文件路径、库文件路径等),再通过abicc基于xml文件生成abi报表。
4.3. 用法三:创建ABI DUMPS
USAGE #3 (CREATE ABI DUMPS):
1. Create XML-descriptors for two versions
of a library (OLD.xml and NEW.xml):
<version>
1.0
</version>
<headers>
/path/to/headers/
</headers>
<libs>
/path/to/libraries/
</libs>
2. Create ABI dumps:
abi-compliance-checker -lib NAME -dump OLD.xml -dump-path ./ABI-0.dump
abi-compliance-checker -lib NAME -dump NEW.xml -dump-path ./ABI-1.dump
3. Compare ABI dumps to create report:
abi-compliance-checker -l NAME -old ABI-0.dump -new ABI-1.dump
先配置xml描述文件(包含版本、头文件路径、库文件路径等),再通过abicc基于xml文件生成dump文件,然后通过abicc基于dump文件生成abi报表。
缺点:相比较用法二,多出生成dump文件这一步
4.4. 测试
本次采用方法二进行测试,另外两种方法读者可以自行尝试。
4.4.1. hello1
1)hello.h
#ifndef __HELLO_H__
#define __HELLO_H__
void hello(char *what);
#endif
2)hello.c
#include <stdio.h>
#include "hello.h"
void hello(char *what)
{
if (what == NULL) {
return;
}
printf("hello %s\n", what)

本文介绍ABIComplianceChecker(ABI合规性检测器),一种用于检查C/C++软件库的向后二进制和源代码级兼容性的工具。文章详细阐述了其原理、使用方法及工作流程。
1043

被折叠的 条评论
为什么被折叠?



