这是 icheck 命令,可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器
程序:
您的姓名
icheck - C 接口 ABI/API 检查器
概要
检查 --规范化 [[--基线 文件] ...] [配置[GCC_选项] [--] 档
检查 - 相比 [配置] 旧文件 新文件
商品描述
用于静态检查 API 和 ABI 更改的 C 接口的工具。 对类型的所有更改
应该检测可能导致 ABI 更改的声明以及大多数 API 更改。
icheck 旨在与库一起使用,作为防止 ABI 漂移的一种方法。
指令
使用--canonify 将一组源文件缩减为规范的接口文件,然后进行比较
带有 --compare 的两个这样的接口文件。 如果它们之间有接口变化,
icheck 将描述更改并失败。
--规范化 [[--基线 文件] ...] [配置[GCC_选项] [--] 档
规范源代码文件(通常是 .h 标头),以便稍后与
- 相比. 通常与 -o 将摘要保存到文件的选项。
- 相比 [配置] 旧文件 新文件
读取使用生成的两个规范接口文件 --规范化 并比较
应用程序公共接口中更改的源代码结构
(开发人员接口或 API)和应用程序二进制接口 (ABI) 用于
链接到其他程序或库。
配置
查核 配置
-o, - 输出 文件
将输出发送到 FILE,而不是 stdout。
-调试 N
转储调试信息。
- 只要 事情
只处理给定的事物。
--跳过 文件
跳过不必要的东西 文件.
--从重新跳过 正则表达式
从匹配正则表达式的文件中跳过不必要的东西。
--仅来自 文件
只取东西 文件.
--仅来自re 正则表达式
只从匹配正则表达式的文件中获取内容。
GCC_选项
GCC_OPTIONS 传递给 gcc -E
帮助 配置
- 帮帮我
显示帮助概要 检查.
示例
所有源文件都经过gcc预处理,所以canonify需要相同的include信息
作为源代码 - 按照 Makefile 中的语法包含 -I 选项 CPP (或
GCC) 以便可以找到所有必要的标题。 检查 如果需要,将中止
找不到标题。 源代码必须是可编译的; icheck 无法处理以下文件
不能直接编译。 如果标题缺少#include 语句,或者其他情况
需要特殊使用,则不能直接用icheck处理。
相反,编写一个适当设置的存根 C 文件,然后#includes
标头。
检查 --规范化 -o ~/icheck/旧版本 -I/usr/include/foo-2.0 /usr/src/bar/src/foobar.h
准备 foobar.h 文件及其包含的所有文件的文本摘要。 总结是
写给 ~/icheck/旧版本. 重复 /usr/src/bar1/src/foobar.h - 同一个文件
在较新的源目录中,输出到一个新文件,例如 ~/icheck/新版本.
检查 - 相比 -o 〜/ icheck /结果.txt ~/icheck/旧版本 ~/icheck/新版本
编写两个摘要文件的比较报告。 报告指出所有
比较期间发现的 ABI 和/或 API 的变化。
检查 --规范化 -o debian/icheck.canonical -idebian/foo-dev/usr/include debian/foo-
开发/usr/include/foobar.h
检查 - 相比 debian/icheck.清单 debian/icheck.canonical
这两个声明,包含在一个 Debian/规则 文件,将导致包构建
如果 API 或 ABI 以意外方式更改,则失败,其中 icheck.manifest 是
预期的接口,包含在包中。
请注意, --compare 的参数本身是经过预处理的有效 C 文件,
所以 icheck.manifest 可以包含 C 预处理器逻辑。 这在打包时很有用
根据主机架构导出不同的接口。 在这种情况下,你不能
当界面发生变化并且您需要将其替换为 icheck.canonical 的新副本时
更新清单。 与其手动更新整个清单,不如手动
在一个文件中写入接口描述(icheck.static-清单) 然后使用:
检查 --规范化 --基线 debian/icheck.static 清单 -o debian/icheck.dynamic-
舱单
最后,创建 icheck.manifest 包含:
#include "icheck.static-manifest"
#include "icheck.dynamic-manifest"
这允许您手动更新清单的某些部分,同时仍然自动
生成其余部分。
OUTPUT
icheck 根据类型生成每个可能的 API 或 ABI 更改的详细描述
信息。 它不会调查实际的程序代码,因此有可能
它检测到的某些类型更改不是实际的 ABI 或 API 更改。 然而,这通常
只有在明确为它编写程序代码时才会发生。 如果有疑问,假设它是
改变。
最后,icheck 提供更改的摘要。 请注意,这里的方向是
取决于参数的顺序 --compare:旧接口必须先出现,
否则方向将相反。 各种术语的含义如下
如下:
ABI ABI 是兼容的,如果根据一个版本的
使用其他版本运行时,界面将工作。
API 如果事物是针对一个版本的
可以针对其他接口进行编译。
向前兼容
如果针对旧版本进行编译,则接口是向前兼容的
版本将与新的一起使用。 这是重要的特征 名
的变化。
向后兼容
接口是向后兼容的,如果根据新编译的东西
版本将与旧的一起使用。 这是重要的特征 什库
版本 变化。 如果您不构建 Debian 软件包,您可能不会
关心不向后兼容的更改。
使用 onworks.net 服务在线使用 icheck