这是命令 abi-compliance-checker,可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器
程序:
您的姓名
abi-compliance-checker - 比较共享 C/C++ 库的 ABI 兼容性的工具
版本
商品描述
产品名称:
ABI Compliance Checker (abi-compliance-checker) 检查一个程序的向后兼容性
C/C++ 库 API
描述:
ABI 合规性检查器 (ABICC) 是一种用于检查反向二进制和
共享 C/C++ 库的源代码级兼容性。 该工具检查头文件
和新旧版本的共享库 (*.so) 并分析 API 和
可能会破坏二进制和/或源代码级兼容性的 ABI(ABI=API+编译器 ABI):
调用堆栈的更改、v-table 的更改、删除的符号、重命名的字段等。
二进制不兼容可能会导致应用程序崩溃或行为不正确
如果它们在新版本上运行,则使用旧版本的库构建。 来源
不兼容可能会导致新库版本的重新编译错误。
该工具适用于软件库的开发人员和维护人员
对确保向后兼容性感兴趣的操作系统,即允许
旧应用程序运行或使用较新的库版本重新编译。
此外,ISV 还可以使用该工具来检查应用程序对新应用程序的可移植性。
库版本。 发现的问题可以在调整时考虑
应用程序到新的库版本。
该工具是免费软件:您可以重新分发和/或修改它
GNU LGPL 或 GNU GPL 的条款。
用法:
abi-compliance-checker [选项]
例:
abi-合规检查器 -lib 您的姓名 -旧 旧文件 -新的 新建文件
OLD.xml 和 NEW.xml 是 XML 描述符:
1.0
/路径1/到/标头/ /路径2/到/标头/
...
/路径1/到/库/ /路径2/到/库/
...
相关信息 选项:
-h|-帮助
打印此帮助。
-i|-信息
打印完整信息。
-v|-版本
打印版本信息。
-转储版本
打印工具版本(1.99.14),不要做任何其他事情。
一般 选项:
-l|-lib|-库名称
库名称(无版本)。
-d1|-旧|-o 路径
第一个(旧)库版本的描述符。 它可能是以下之一:
1. XML 描述符(VERSION.xml 文件):
1.0
/路径1/到/标头/ /路径2/到/标头/
...
/路径1/到/库/ /路径2/到/库/
...
...
2. 生成的 ABI 转储 -倾倒 选项 3. 带有标题和/或共享的目录
库 4. 单个头文件
如果您使用的是 2-4 个描述符类型,那么您应该指定版本号
- -v1 和 -v2 选项。
欲了解更多信息,请访问:
http://ispras.linuxbase.org/index.php/Library_Descriptor
-d2|-new|-n 路径
第二个(新)库版本的描述符。
-倾倒|-dump-abi 路径
为输入 XML 描述符创建库 ABI 转储。 你可以转移到任何地方
并通过而不是描述符。 也可用于调试工具。
支持的 ABI 转储版本:2.0<=V<=3.2
额外服务 选项:
-app|-应用程序路径
此选项允许指定应检查的应用程序
可移植到新的库版本。
-静态库
检查静态库而不是共享库。 这的部分
XML 描述符应指向静态库位置。
-gcc 路径 PATH
要使用的跨 GCC 编译器的路径,而不是通常的(主机)GCC。
-gcc-前缀 字首
GCC 工具链前缀。
-gcc-选项 选择
其他编译器选项。
-系统根目录 DIR
指定备用根目录。 该工具将搜索包含路径
DIR/usr/include 和 DIR/usr/lib 目录。
-v1|-版本1 NUM
在描述符之外指定第一个库版本。 如果您需要此选项
更喜欢另一种描述符类型(请参阅 -d1 选项)。
在一般情况下,您应该在 XML 描述符中指定它:
VERSION
-v2|-版本2 NUM
在描述符之外指定第二个库版本。
-vnum 民
在生成的 ABI 转储中指定库版本。 这的部分
在这种情况下,输入 XML 描述符将被覆盖。
-s|-严格
将所有兼容性警告视为问题。 添加多个“低”严重性
工具返回值的问题。
-仅标题
检查没有共享库的头文件。 它很容易运行,但可能会提供一个
具有误报且未检测到的低质量兼容性报告
添加/删除符号。
或者,您可以在中的部分
XML 描述符:
没有
-显示retval
在报告中显示交易品种的返回类型。
-符号列表 PATH
此选项允许您指定一个带有符号列表的文件(在
C++)应该被检查。 不会检查其他符号。
-类型列表 PATH
此选项允许您指定一个文件,其中包含应为的类型列表
检查。 不会检查其他类型。
-跳过符号 PATH
不应检查的符号列表。
-跳过类型 PATH
不应检查的类型列表。
-标题列表 PATH
带有标题列表的文件,应该检查/转储。
-跳过标题 PATH
带有头文件列表的文件,不应检查。
-标题 您的姓名
仅检查/转储此标头的 ABI。
-使用转储
为库的两个版本进行转储并比较转储。 这应该增加
工具的性能并减少系统内存使用。
-nostdinc
不要在 GCC 标准系统目录中搜索头文件。
-转储系统 您的姓名 -系统根目录 DIR
找到DIR目录下的所有共享库和头文件,创建XML
描述符并为每个库进行 ABI 转储。 ABI 转储的结果集可以是
比较的 (--cmp-系统) 另一个是为其他版本的操作创建的
系统以检查它们的兼容性。 不要忘记指定
-跨海湾合作委员会 如果您的目标系统需要某些特定版本的 GCC,则选项
编译器(不同于主机 GCC)。 系统 ABI 转储将生成为:
sys_dumps/名称/ARCH
-转储系统 描述符文件
与上一个选项相同,但将目标系统的 XML 描述符作为
输入,您应该在其中描述它:
/* 主要部分 */
/* 系统名称 */
/* 头文件和/或的路径列表
带有头文件的目录,每行一个 */
/* 共享库和/或的路径列表
包含共享库的目录,每行一个 */
/* 可选部分 */
/* 要搜索的目录列表
自动生成头文件包含路径,每行一个 */
/* 要搜索的目录列表
用于解决依赖关系的共享库,每行一个 */
/* 使用工具的目录列表
用于分析(GCC 工具链),每行一个 */
/* GCC 工具链前缀。
例子:
arm-linux-gnueabi arm-none-symbianelf */
/* 额外的 GCC 选项,每行一个 */
-系统信息 DIR
此选项应与 -转储系统 转储操作 ABI 的选项
系统并配置转储过程。 您可以在包中找到示例:
模块/目标/{unix、symbian、windows}
-cmp-系统 -d1 系统转储/NAME1/ARCH -d2 系统转储/NAME2/ARCH
比较两个系统 ABI 转储。 为每个库和库创建兼容性报告
通用 HTML 报告,包括所有已检查库的测试结果摘要。
报告将生成至:
sys_compat_reports/NAME1_to_NAME2/ARCH
-libs 列表 PATH
带有库列表的文件,应该由 -转储系统 选项
或者应该由 -cmp-系统 选项。
-分机|-扩展
如果您的库 A 应该被其他库 B 使用并且您想控制
B 的 ABI,那么您应该启用此选项。 该工具将检查更改
在所有数据类型中,即使它们没有被库 A 中的任何函数使用。
数据类型不是 A 库 ABI 的一部分,但可能是 B 库 ABI 的一部分
图书馆。
简短的方案是:
app C(损坏的)-> lib B(损坏的ABI)-> lib A(稳定的ABI)
-q|-安静
将所有消息打印到文件而不是 stdout 和 stderr。 默认路径(可以是
改变了 -日志路径 选项):
日志/运行.log
-标准输出
将分析结果(兼容性报告和 ABI 转储)打印到标准输出而不是
创建文件。 这将允许将数据传送到其他程序。
-报告格式 FMT
更改兼容性报告的格式。 格式:
htm - HTML 格式(默认) xml - XML 格式
-转储格式 FMT
更改 ABI 转储的格式。 格式:
perl - Data::Dumper 格式(默认) xml - XML 格式
-xml
别名: --报告格式=XML or --转储格式=XML
-郎 朗
设置库语言(C 或 C++)。 如果该工具不能,您可以使用此选项
自动检测语言。 此选项可用于检查 C 库标题
(--郎=C)in --仅标题 or --扩展 模式。
-拱 拱
设置库架构(x86、x86_64、ia64、arm、ppc32、ppc64、s390等)。 这
如果工具无法检测到输入的正确架构,则该选项很有用
对象。
-二进制|-bin|-abi
仅显示“二进制”兼容性问题。 生成报告至:
compat_reports/LIB_NAME/V1_to_V2/abi_compat_report.html
-资源|-src|-api
仅显示“源”兼容性问题。 生成报告至:
compat_reports/LIB_NAME/V1_to_V2/src_compat_report.html
-限制影响 极限
在更改的描述下列出的受影响符号的最大数量
输入报告。
其他 选项:
-测试
运行内部测试。 创建示例库的两个二进制不兼容版本和
运行该工具以检查它们的兼容性。 此选项允许您检查是否
该工具在当前环境中正常工作。
-测试转储
测试创建、读取和比较 ABI 转储的能力。
-调试
调试模式。 在屏幕上打印调试信息。 保存中间分析阶段
在调试目录中:
调试/LIB_NAME/版本/
还可以考虑使用 - 倾倒 调试工具的选项。
-cpp 兼容
如果你的头文件是用C语言写的,可以用G++编译
编译器(即不要使用 C++ 关键字),然后你可以告诉工具这个和
加速分析。
-cpp 不兼容
如果输入 C 头文件使用 C++ 关键字,则设置此选项。
-p|-params 路径
带有函数参数名称的文件路径。 它可用于改进报告
查看库头文件是否没有参数名称。 文件格式:
func1;param1;param2;param3 ... func2;param1;param2;param3 ...
...
-relpath PATH
在用于转储库的 XML 描述符中将 {RELPATH} 宏替换为 PATH
ABI(见 -倾倒 选项)。
-relpath1 PATH
将 {RELPATH} 宏替换为第一个 XML 描述符中的 PATH (-d1).
-relpath2 PATH
将 {RELPATH} 宏替换为 PATH 在第二个 XML 描述符(-d2).
-转储路径 PATH
指定生成 ABI 转储的 *.abi.tar.gz 或 *.abi 文件路径。 默认:
abi_dumps/LIB_NAME/LIB_NAME_VERSION.abi.tar.gz
-种类
启用 ABI 转储中的数据排序。
-报告路径 PATH
兼容性报告的路径。 默认:
compat_reports/LIB_NAME/V1_to_V2/compat_report.html
-bin报告路径 PATH
“二进制”兼容性报告的路径。 默认:
compat_reports/LIB_NAME/V1_to_V2/abi_compat_report.html
-src-报告-路径 PATH
“源”兼容性报告的路径。 默认:
compat_reports/LIB_NAME/V1_to_V2/src_compat_report.html
-日志路径 PATH
所有消息的日志路径。 默认:
日志/LIB_NAME/VERSION/log.txt
-log1-路径 PATH
库的第一个版本的日志路径。 默认:
日志/LIB_NAME/V1/log.txt
-log2-路径 PATH
库的第二个版本的日志路径。 默认:
日志/LIB_NAME/V2/log.txt
-日志模式 MODE
更改日志记录模式。 模式:
w - 覆盖旧日志(默认) a - 附加旧日志 n - 不写入任何日志
-受列表影响
生成包含 HTML 兼容性之外的不兼容符号列表的文件
报告。 使用来自 GNU binutils 的 'c++filt @file' 命令来解开 C++ 符号
生成的文件。 默认名称:
abi_affected.txt src_affected.txt
-零件 您的姓名
HTML 报告的标题和摘要中的组件名称。 默认:
图书馆
-标题 您的姓名
将报告标题中的库名称更改为 NAME。 默认情况下会显示一个
指定的名称 -l 选项。
-额外信息 DIR
将额外信息转储到 DIR。
-额外转储
创建包含翻译单元中所有符号的扩展 ABI 转储。
-力
如果该工具不起作用,请尝试使用此选项。
-宽容 LEVEL
应用一组启发式方法来成功编译输入头文件。 你可以
通过将它们连接成一个字符串(例如 13、124、
等等。)。 级别:
1 - 跳过非 Linux 头文件(例如 win32_*.h 等) 2 - 跳过内部头文件(例如
*_p.h、impl/*.h 等)3 - 跳过包含非 Linux 头文件的头文件 4 - 跳过
其他人包含的标题
-宽容
启用最高容差级别 [1234]。
-检查
检查 ABI 转储的完整性。
-快的
快速分析。 禁用某些模板实例的检查。
-跳过内部符号 模式
不要检查与模式匹配的符号。
-跳过内部类型 模式
不要检查与模式匹配的类型。
报告:
兼容性报告将生成到:
compat_reports/LIB_NAME/V1_to_V2/compat_report.html
日志将生成到:
日志/LIB_NAME/V1/log.txt 日志/LIB_NAME/V2/log.txt
退出 代码:
0 - 兼容。 该工具已运行,没有任何错误。 非零 - 不兼容或
该工具运行时出错。
了解更多 信息:
http://lvc.github.io/abi-compliance-checker/
使用 onworks.net 服务在线使用 abi-compliance-checker