Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于检测C+中ABI中断的静态分析工具+; pTS/共享库与C++接口的二进制向后兼容性并不难。也就是说,如果给定两组不同的头文件:DSO早期状态的头文件和当前状态的头文件(也可能是DSO),是否有一个静态分析工具可以帮助检测此类ABI中断?欢迎提供免费和商业产品建议_C++_Shared Libraries_Static Analysis_Backwards Compatibility - Fatal编程技术网

用于检测C+中ABI中断的静态分析工具+; pTS/共享库与C++接口的二进制向后兼容性并不难。也就是说,如果给定两组不同的头文件:DSO早期状态的头文件和当前状态的头文件(也可能是DSO),是否有一个静态分析工具可以帮助检测此类ABI中断?欢迎提供免费和商业产品建议

用于检测C+中ABI中断的静态分析工具+; pTS/共享库与C++接口的二进制向后兼容性并不难。也就是说,如果给定两组不同的头文件:DSO早期状态的头文件和当前状态的头文件(也可能是DSO),是否有一个静态分析工具可以帮助检测此类ABI中断?欢迎提供免费和商业产品建议,c++,shared-libraries,static-analysis,backwards-compatibility,C++,Shared Libraries,Static Analysis,Backwards Compatibility,如果它还可以警告不良做法,例如DSO接口中的内联函数和默认函数参数,那就太好了。ABI-应用程序二进制接口归结为编译器将源代码转换为机器可识别指令的方式。在最终的程序中,相同的源代码行可以转换为不同的字节流 在源代码上运行的静态分析器将无法预测编译器将如何翻译它。这个决定是在编译器编码或设置中做出的。因此,我不相信静态分析器在这种情况下会对您有所帮助 唯一安全的方法是使用C接口导出库。C++库只与编译的编译器兼容。 我记得在工作中他们用来测试二进制兼容性。基本上,它所做的是生成编译器对象树的xm

如果它还可以警告不良做法,例如DSO接口中的内联函数和默认函数参数,那就太好了。

ABI-应用程序二进制接口归结为编译器将源代码转换为机器可识别指令的方式。在最终的程序中,相同的源代码行可以转换为不同的字节流


在源代码上运行的静态分析器将无法预测编译器将如何翻译它。这个决定是在编译器编码或设置中做出的。因此,我不相信静态分析器在这种情况下会对您有所帮助

唯一安全的方法是使用C接口导出库。C++库只与编译的编译器兼容。 我记得在工作中他们用来测试二进制兼容性。基本上,它所做的是生成编译器对象树的xml表示。理论上说,如果xml是等价的,那么它们的二进制兼容性就得到了维护。

我假设您熟悉本教程:,如果不阅读它的话

我听说过这个工具: ,但从未测试或使用过,因此没有意见

您可能还对此感兴趣:

-用于检查共享C/C++库(DSO)的向后二进制/源代码级兼容性的工具:

用于检查C/C++库的向后二进制和源代码级兼容性的工具。该工具检查新旧版本的头文件和共享库,并分析可能破坏二进制和/或源代码兼容性的API和ABI(ABI=API+编译器ABI)中的更改:调用堆栈中的更改、v表更改、删除的符号、重命名的字段等

-C接口ABI/API检查器:

用于静态检查C接口的API和ABI更改的工具。应检测所有可能导致ABI更改的类型声明更改,以及大多数API更改。 icheck旨在与库一起使用,作为防止ABI漂移的一种方法

-具有符号版本控制的共享库的ABI兼容性检查器:

shlib compat使用dwarf调试符号来重新创建和比较导出文件的定义 符号,包括函数参数和结构类型

此外,您可能会对产品和服务感兴趣。它们都由abi compliance checker工具提供支持。

我们的工具比较两个源文件,并报告语言结构(标识符、表达式、语句等)和合理的编辑操作(插入、删除、移动、复制、替换标识符等)方面的差异

它没有直接回答ABI问题,但它提供的信息可能非常有用。另一个答案中讨论的示例是返回类型从struct{a,b}更改为struct{b,a}。SmartDifferenticer将报告a已移动。(注意:常规的diff工具会报告包含结构定义的行已更改,因此您可以获得相同的信息,但SmartDifference也会忽略空白/布局和注释中的更改,从而减少概念上的干扰)


这两个工具都不会报告typedef定义的更改,它位于另一个头文件中。但是,人们可能会比较所有涉及的头文件。如果您不想手动完成,无论使用什么工具,都必须包含一个完全的C++分析器、名称解析器,并且必须比较声明的等价性。另一张海报提出了这个答案:比较GCCXML输出的等效性。我不确定这在实践中有多容易;这不能仅仅是“文件顺序是否相同?”。

是什么让您认为内联函数和默认参数是不好的做法?此外,我不确定您是否理解ABI的含义-我看不出它与头文件有什么关系。理想情况下,如果你得到一个ABI不兼容,它会被链接器发现。也许我在构建一个DSO不是很清楚。如果库接口具有内联函数,则将其编译到DSO的客户机中。因此,更改内联函数不会影响应用程序的功能。默认函数参数也是如此。DSO?也许这就是为什么你不清楚你在做什么。平台?动态共享对象(DSO)也称为共享库。这些平台是Linux和商业unices。静态分析工具可以检测更改函数的返回类型、向现有成员函数添加虚拟关键字、更改函数参数的类型、向可实例化到堆栈的类添加成员。所有这些都破坏了二进制向后兼容性。所以,我不同意。静态分析器可以帮助检测ABI中断。我不同意这种说法:例如,静态分析器会检测到函数返回值是一个结构,比如说包含整数元素A、b。在检查源代码时,静态分析器无法知道编译器是否会将内存中的结构设置为{a,b}或{b,a},它仍然是相同的结构,但不同的ABI模式。我认为OP指的是给这个理论工具提供相同头文件的旧版本和新版本,该工具会说,在较新版本中的更改是否意味着使用较旧版本编译的库不再适合与较新的头一起使用。您是正确的,静态分析工具没有足够的信息来检测所有中断,但它可以检测,如果