我们有一个遗留库实现和相关的公开头文件。最近发现,暴露的头文件中的一些函数,在库实现中没有对应的定义。
我们想检查是否还有更多这样的功能。有没有更简单的方法来做到这一点,而不是筛选标题中存在的每个 API,然后检查它是否有定义?
我们有一个遗留库实现和相关的公开头文件。最近发现,暴露的头文件中的一些函数,在库实现中没有对应的定义。
我们想检查是否还有更多这样的功能。有没有更简单的方法来做到这一点,而不是筛选标题中存在的每个 API,然后检查它是否有定义?
您可以从调用所有函数并尝试编译它的标头生成 C 源代码(Perl 是一种方法!)。链接器会抱怨缺少功能。
尝试通过abi-compliance-checker工具创建 ABI 转储文件:
abi-compliance-checker -lib NAME -dump DESC.xml
DESC.xml文件如下:
<version>
1.0
</version>
<headers>
/path(s)/to/headers
</headers>
<libs>
/path(s)/to/libraries
</libs>
生成的 ABI 转储文件将包含您需要的有关头文件 ( SymbolInfo
) 中声明的符号和共享库 ( ) 导出的符号的信息Symbols
。
您还可以通过添加--xml
选项生成 xml 格式的 ABI 转储。
如果这是 C,您可以执行以下操作:
printf("", /* insert all functions here */);
那应该将它们全部作为函数指针传递给printf
. 那些不存在的应该显示为链接器错误。
(在 C++ 中,您必须显式列出重载,这使得它有点困难。)
我倾向于使用ctags
从头文件生成标识符列表,然后使用ar
,emfar
或elfdump
在 Unix 或lib.exe
Windowsdumpbin.exe
中(参见此处的讨论)从库中转储标识符列表,然后对diff
两个列表进行排序。