5

我们有一个遗留库实现和相关的公开头文件。最近发现,暴露的头文件中的一些函数,在库实现中没有对应的定义。

我们想检查是否还有更多这样的功能。有没有更简单的方法来做到这一点,而不是筛选标题中存在的每个 API,然后检查它是否有定义?

4

4 回答 4

1

您可以从调用所有函数并尝试编译它的标头生成 C 源代码(Perl 是一种方法!)。链接器会抱怨缺少功能。

于 2013-01-25T04:28:31.307 回答
1

尝试通过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 转储。

于 2013-01-28T07:23:42.907 回答
0

如果这是 C,您可以执行以下操作:

printf("", /* insert all functions here */);

那应该将它们全部作为函数指针传递给printf. 那些不存在的应该显示为链接器错误。

(在 C++ 中,您必须显式列出重载,这使得它有点困难。)

于 2013-01-25T04:43:56.013 回答
0

我倾向于使用ctags从头文件生成标识符列表,然后使用ar,emfarelfdump在 Unix 或lib.exeWindowsdumpbin.exe中(参见此处的讨论)从库中转储标识符列表,然后对diff两个列表进行排序。

于 2013-01-25T04:54:08.677 回答