abi-compliance-checker 理解

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

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)
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

canpool

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值