问题标签 [binary-compatibility]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1424 浏览

com - VB6 二进制兼容性 - 添加新事件

在 VB6 ActiveX exe 项目中,是否有任何方法可以在添加新事件时为事件调度接口保留 GUID?

显然,更改现有事件会破坏兼容性。添加新的不会导致 VB6 IDE 发出警告。不过,这并不让我感到惊讶,因为当您添加新方法时它也不会发出警告,但至少现有方法会保留它们的 GUID。

对于事件,如果稍后添加新事件,似乎无法保持现有事件的向后兼容性。

对于通过 COM 集成的 VB6 应用程序来说,这似乎不是问题;我假设 VB 运行时做了一些聪明的事情来通过注册表获取事件,而无需预先知道 GUID。

在另一个应用程序是 .Net(特别是 C#)并且我必须手动声明接口以实现事件接收器的情况下,我希望 GUID 保持不变以避免在 VB6 时重新编码 i/f应用程序已扩展。我可能既不知道也不关心 VB6 应用程序中新实现的事件——我只想能够继续使用预先存在的事件,而无需更改 .Net 源代码。

是否有一些我错过的 VB6 技巧可以让我做到这一点?

0 投票
6 回答
4729 浏览

c - Linux 发行版之间的二进制兼容性

抱歉,如果这是一个明显的问题,但我在网上发现的参考资料令人惊讶地少......

我正在使用由我们的一位业务合作伙伴用 C 编写的 API,并以 .so 二进制文件的形式提供给我们,该文件基于 Fedora 11 构建。我们一直在 Fedora 11 开发机器上测试该 API,没有任何问题。但是,当我尝试在我们客户的目标平台(恰好是 SuSE Enterprise 10.2)上链接 API 时,我收到“无法识别文件格式”错误。

也是 binutils 包的一部分的命令,例如 objdump 或 nm,给我同样的文件格式错误。“文件”命令向我显示:

“ldd”命令显示:

我猜这是由于两个平台上的 C 库之间的不兼容,问题是代码是针对新版本的 glibc 等编译的,而不是 SuSE 10.2 上可用的。我发布这个问题是因为有一种方法可以在我们合作伙伴的 Fedora 11 平台上编译代码,使其也可以在 SuSE 10.2 上运行。

0 投票
5 回答
18451 浏览

c++ - 如何为二进制兼容的可扩展性设计 C++ API

我正在为一个 C++ 库设计一个 API,它将分布在一个 dll / 共享对象中。该库包含具有虚函数的多态类。我担心如果我在 DLL API 上公开这些虚拟函数,我就无法使用更多的虚拟函数扩展相同的类,而不会破坏与为该库的先前版本构建的应用程序的二进制兼容性。

一种选择是使用PImpl习惯用法来隐藏所有具有虚函数的类,但这似乎也有其局限性:这样应用程序就失去了对库的类进行子类化和覆盖虚方法的可能性。

您将如何设计一个可以在应用程序中子类化的 API 类,同时又不会失去在新版本的 dll 中使用(非抽象)虚拟方法扩展 API 的可能性,同时保持向后二进制兼容?

更新:库的目标平台是 windows/msvc 和 linux/gcc。

0 投票
3 回答
153 浏览

java - 删除接口会破坏对象上的代码调用方法吗?

我需要在 Java 中进行一些重构,并且需要保持一定程度的二进制兼容性。在这种情况下,我想删除一些旧接口,这些接口不再在任何地方使用,并且需要相当大的(并且不推荐使用的)外部依赖项。

我有C实现 interface的类I,并且我有在C. 调用代码知道它正在使用C,而不仅仅是接口。

当我从类定义中删除接口(但保留所有方法)时,调用代码(根本不引用接口)是否仍然有效(无需重新编译)?

0 投票
4 回答
312 浏览

c++ - C++ 中的全局数组会破坏二进制兼容性吗?

假设一个共享库包含以下行:

1) 应用程序可以链接到这个库并使用符号“arr”吗?

2) 如果在定义中添加了一个新元素,二进制兼容性会被破坏吗?

3) 如果其中一个字符串文字被更改了怎么办?

4)为什么(不)?

干杯,卢克

0 投票
2 回答
6953 浏览

c++ - 如何自动测试二进制兼容性?

可以在编译之前通过比较代码来完成吗?是否有任何工具已经这样做了?

0 投票
18 回答
324134 浏览

java - 是什么导致 java.lang.IncompatibleClassChangeError?

我将 Java 库打包为 JAR,java.lang.IncompatibleClassChangeError当我尝试从中调用方法时,它会抛出很多 s。这些错误似乎是随机出现的。什么样的问题可能导致此错误?

0 投票
10 回答
23347 浏览

linux - Linux 发行版二进制兼容性

有什么方法可以在 Linux 发行版中制作二进制文件并在具有相同架构的另一个发行版上运行它?或者我应该在不同的发行版上编译和构建它?

Redhat,基于 Debian 的二进制文件发行版之间是否有任何兼容性?(我想在 Fedora 上使用我的 Ubuntu 二进制文件!)

0 投票
7 回答
2045 浏览

c++ - 为什么应用程序二进制接口对编程很重要

我不明白为什么 ABI 是开发用户空间应用程序的重要上下文。操作系统的系统调用集是否被视为 ABI?但如果是这样,那么关于系统调用的所有复杂性不都封装在标准库中吗?

那么ABI 兼容性是否仅与在不同平台上运行静态链接的应用程序相关,因为系统调用将嵌入到二进制文件中?

0 投票
6 回答
5118 浏览

java - 如何静态识别 JAR 中缺少的方法(二进制兼容性)

我想验证 2 个 JAR 之间的二进制兼容性。

按照这个答案中的建议,我使用了jboss tattletale,但它只能找到缺失的类。

如何查找是否缺少方法?有可能吗?

例如

“取决于”类Foo 取决于 Bar(像许多其他中产阶级工人一样)

“编译时间”类

现在想象一个的Bar jar 正在替换已编译的时间栏:

“运行时”类

有没有办法在不运行它并获得的情况下识别丢失的方法NoSuchMethodError


免责声明:这是对我自己的相关问题的重大改写,不可删除。我选择提出一个新问题,因为重新措辞会使当前的 2 个答案与主题完全无关。