gpt4 book ai didi

c++ - ABI 兼容性 header /库交叉检查

转载 作者:太空狗 更新时间:2023-10-29 21:49:12 28 4
gpt4 key购买 nike

我一直在四处寻找 ABI 交叉检查工具。现在我已经遇到了其他问题中建议的一些工具,例如在这些问题中:

How to test binary compatibility automatically?

Static analysis tool to detect ABI breaks in C++

现在,这并不是我想要做的——因为这些跟踪版本之间的 ABI 变化。

我想知道给定项目源文件+库头文件和库.so文件,以及编译器版本(用于编译库和项目),是否可以交叉检查输出ABI 的匹配编译库?

因此,它适用的情况是,如果上游库提供了 libfoo.so 和 libfood.so。其中 food 是一个略有不同的 ABI,(比如 double 而不是 float ),但还没有到无法编译的程度。

  • 是否有可能想出一个测试(可能不是防弹的)来表明编译后的可执行文件已链接到正确的库?
  • 有没有工具可以做到这一点?

最佳答案

如果你假设你只有 libfoo.so 用 C 编码(没有它的头文件,你也应该有),没有办法知道,例如内部函数的签名,因为共享对象的符号表不包含任何类型信息(例如,除了传统智慧之外,没有什么可以阻止库包含一个 malloc 函数,该函数将两个整数相加并返回它们求和,而不是进行通常的堆分配)。

因此 libfoo.so 可能会被滥用。然而,在某些共享库中通常有与符号关联的版本(如果您 dlopen-ed 一个库,您可以通过 dlvsym 以编程方式查询)。有一些方法可以生成版本。

如果库是纯 C++,那么符号是 mangled所以他们的编码包含他们的签名。

最佳做法是在您的库中包含一些返回库版本的函数。看glib version information一个很好的例子。

关于c++ - ABI 兼容性 header /库交叉检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8794964/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com