问题标签 [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.
scala - Scala: binary incompatibility between releases
Why is Scala binary incompatible between different releases?
c++ - 是否可以在使用不同编译器编译的应用程序之间共享共享内存中的 C 结构?
我意识到通常 C 和 C++ 标准为编译器编写者提供了很大的自由度。但特别是它保证像 C 结构成员这样的 POD 类型必须按照它们在结构定义中列出的顺序排列在内存中,并且大多数编译器都提供了扩展,让您可以修复成员的对齐方式。因此,如果您有一个定义结构的标头并手动指定其成员的对齐方式,然后使用标头使用不同的编译器编译两个应用程序,那么一个应用程序是否应该能够将结构的实例写入共享内存而另一个应用程序能够正确读取它吗?
我假设包含的类型的大小在同一架构上的两个编译器中是一致的(它必须已经是同一个平台,因为我们正在谈论共享内存)。我意识到这对于某些类型并不总是正确的(例如 GCC 和 MSVC 64 位中的 long 与 long long),但现在有 uint16_t、uint32_t 等类型,并且 float 和 double 由 IEEE 标准指定。
c# - 向后兼容 C#/.NET API 的工具?
我找到了这个工具http://sab39.netreach.com/Software/Japitools/JDK-Results/46/,它使用 javadoc 检查不同版本的 Java API 之间的向后兼容性。
是否有与 C#/.NET 等效的工具?
以下是使用此工具比较 JDK 1.5 和 JDK 6 API 的示例: http ://www.kaffe.org/~stuart/japi/htmlout/h-jdk15-jdk6
c++ - C++ 异常二进制兼容性
我的项目使用 2 个不同的 C++ 编译器,g++ 和 nvcc(cuda 编译器)。我注意到从 nvcc 对象文件抛出的异常没有在 g++ 对象文件中捕获。
C++ 异常在同一台机器上应该是二进制兼容的吗?什么会导致这种行为?
其他一切似乎都有效(C++ 对象、运算符)。老实说,我不太了解异常,所以上面的代码可能有错误。
vb6 - 为什么我必须从 Binary Compatibility 将 version compatible 设置为 No Compatibility,然后再回到 Binary Compatibility 才能正常工作?
我的项目最初设置为二进制兼容性,但它没有构建。所以我首先将它设置为不兼容,它以这种方式构建得很好。然后我将它设置回二进制兼容性,并覆盖之前生成的文件,它工作正常。
为什么这必须发生?
c++ - 使用 LSB C++ 编译器构建 Boost
我想使用来自 Linux 标准库http://www.linuxfoundation.org/collaborate/workgroups/lsb的 LSB C++ 编译器构建我的程序。程序依赖于 Boost 库,使用 gcc 4.4 版本构建。编译失败。是否可以使用 LSB C++ 编译器构建 Boost 库?或者,是否可以使用一些旧的 gcc 版本构建 Boost 库,推荐什么版本?我的最终目标是让我的可执行文件和第三方 Boost 库在大多数 Linux 发行版上运行。
一般来说,可以做些什么来获得更好的 Linux 发行版的二进制兼容性,开发依赖于 Boost 库的 C++ 闭源应用程序?
java - Java - 抽象类和子类的二进制兼容性
在 Java 中,我定义了一个包含具体方法和抽象方法的抽象类,并且它必须由第三方开发人员独立地进行子类化。只是为了确定:我可以对抽象类进行任何与它们的类源兼容但不兼容二进制的更改吗?换句话说:在他们编译了他们的子类之后,我可以改变抽象类吗?这可能会迫使他们重新编译他们的子类?
c++ - 在类声明的末尾添加虚函数可以避免二进制不兼容?
有人可以向我解释为什么在类声明的末尾添加一个虚函数可以避免二进制不兼容吗?
如果我有:
稍后将这个类声明修改为:
我从另一个根据先前声明编译的 .so 得到一个核心转储。但是,如果我将 someFuncC() 放在类声明的末尾(在“int someVal”之后):
我再也看不到核心转储了。有人能告诉我这是为什么吗?这个技巧总是有效吗?
PS。编译器是 gcc,这适用于其他编译器吗?
com - 为什么公共字段和属性可以互换二进制兼容?
在日常工作中,我在一个 VB6(我知道,但不要嘲笑受苦的......)应用程序上工作,该应用程序使用了我们编写的许多库(也在曾经杰出的 VB6 中)。其中一个支持库有大量通过公共属性公开的私有成员,我被要求删除这些属性,并将私有成员变量提升到与原始属性同名的公共字段中。
现在,我不是 COM 专家,但我的印象是类中的每个公开项目都有自己的 GUID。因为我们会从每个值从 2 个 Guid(Property Get 和 Property Let)变成一个他们只使用一个(公共字段)的情况,我期待这会破坏二进制兼容性 - 但它似乎没有没那么做。
谁能解释为什么?
android - 它二进制兼容 emdebian 和 android 吗?
Android ndk 很难用于旧的基于 autoconf 的代码,所以我使用了 scratchbox2/emdebian 来拥有一个完整的构建环境。我可以在 emdebian(arch 是 armel)中构建一个共享库,然后在 android 中使用它吗?