问题标签 [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 投票
2 回答
4184 浏览

c# - 添加枚举值会破坏二进制兼容性吗?

想象一下 DLL 中的这个枚举。

添加枚举值会破坏二进制兼容性吗?如果我要更改它,现有的 EXE 会损坏吗?

我看到了这个答案,但它似乎解决了插入值的情况。如果我只在末尾添加值,可以吗?

0 投票
3 回答
448 浏览

linux - 如何以 Debian 稳定版为目标,但在测试中开发?

我们有一些专门为 Debian stable (x86) 开发的 C++ 应用程序。

目前,这些应用程序的开发也是使用 Debian stable (x86) 系统完成的,因此开发人员拥有与目标系统上相同的所有库版本。
有时,我还需要处理这些组件,它一直困扰着我,我被一个非常过时的 KDevelop 版本(4.0.1 与最新的 4.4.1)所困扰。我想使用更新的系统进行开发(如最新的 Ubuntu 或 Debian 测试),但如何创建适合目标系统的二进制文件?
有没有一些简单的方法可以告诉编译器/链接器使用仅在目标平台上可用的库版本?
我看了Emdebian和他们的交叉编译包,但我认为这对我不起作用。他们似乎只有针对 ARM 等其他架构的软件包。

0 投票
2 回答
194 浏览

c# - 更改子类型的函数的返回类型会破坏二进制兼容性吗?

让我们直接开始吧:

旧代码:

新代码:

显然这里应该没有问题,你在旧返回类型上所做的一切,你仍然可以在新返回类型上做, anyisascast 应该和以前一样......

那么我是否破坏了二进制兼容性,或者我可以将其作为次要版本发布而不打扰用户?

0 投票
1 回答
795 浏览

static-members - 在中间添加新的静态成员会破坏 C++ 库的二进制兼容性吗?

我有一个有很多静态成员的类,但是我在头文件的中间添加了新函数。

这会破坏二进制兼容性吗?客户端需要重新编译吗?

编辑(1):类只有静态函数,没有其他函数和数据成员

0 投票
4 回答
4334 浏览

c++ - 纯虚函数和二进制兼容性

现在,我知道向非叶类添加新的虚函数通常是不好的,因为它破坏了任何尚未重新编译的派生类的二进制兼容性。但是,我的情况略有不同:

我有一个接口类和实现类编译成一个共享库,例如:

我的主应用程序使用这个共享库,基本上可以写成:

换句话说,应用程序没有任何派生自 的类Interface,它只是使用它。

现在,假设我想用 超载Foo( uint16_t arg )Foo( uint32_t arg )我可以安全地做:

并重新编译我的共享库而无需重新编译应用程序?

如果是这样,我需要注意任何不寻常的警告吗?如果没有,除了获取命中和升级库之外,我是否还有其他选择,从而破坏了向后兼容性?

0 投票
3 回答
755 浏览

c++ - 为什么是二进制兼容性?

我正在学习 PIMPL 成语。它的优点之一是二进制兼容性。我想知道二进制兼容性的优点是什么。谢谢!

0 投票
1 回答
4319 浏览

vb6 - 确定二进制兼容性被破坏的原因

当我尝试重建我的一个 VB6 DLL 时,我收到一个警告:

“二进制兼容性 DLL 或 EXE 包含无法找到其定义的参数类型或返回类型”

我必须在选定的 DLL 中发布一些更改(方法内部的简单更改 - 根据没有破坏兼容性)

我遵循的普遍接受的方法是将旧的 DLL 维护在一个单独的共享目录中,并在制作新的 DLL 时,将它们编译为设置为旧的 DLL 集的二进制兼容性。这样做是为了在我注册新的 DLL 时不更改 GUID。这些 GUID 用作其他 DLL 中的引用,我在发布期间没有干扰这些 DLL。

我很确定我没有添加任何东西来破坏二进制兼容性规则(签名、公共方法、变量等没有变化)为什么会发生这个错误?

我是不是因为不检查一些基本的东西而成为菜鸟?从早上开始就挠头。任何帮助深表感谢。

编辑:如果我的签名有任何更改,有没有一种方法可以在不比较代码的情况下知道?

0 投票
4 回答
2892 浏览

c++ - C++ 中的部分类

我想避免重新编译包含公共头文件的所有内容,只是因为类定义的私有部分发生了更改。我正在研究 PIMPL 之外的其他选项。

这是我尝试过的:

我创建了一个包含 A 类的库:

A_p.h包含 A 类的私有部分

公共头文件:

A.cpp

然后,我创建了一个 Win32 控制台项目,其中包括公共标头 (Ah) 和针对 .lib 文件的链接。

一切似乎都有效,但我想知道一路上是否有任何陷阱。谁能详细说明这一点?

0 投票
1 回答
370 浏览

c++ - C++ 二进制兼容 dll POD 类成员初始化导致崩溃

我正在尝试在使用 mingw 构建的 dll 中创建一个可在 Windows VS 应用程序中使用的互编译器兼容类。我的问题是,当从 VS 程序调用函数时,我的类在尝试初始化成员变量时崩溃。使用 STL 或在同一函数中创建局部变量可以正常工作。

ConsoleApplication2.exe 中 0x6BEC19FE (test.dll) 处的未处理异常:0xC0000005:访问冲突写入位置 0x154EB01E。

简单演示:

dll代码

加载dll并调用测试函数的主程序:

主程序使用 VS2012 在调试模式下编译,dll 使用 mingw 的 g++ 构建 -

g++ -shared -o test.dll test.cpp

有人可以为我解释一下这种行为吗?

谢谢你。

0 投票
1 回答
675 浏览

c++ - std::unique_ptr ABI 是否与原始指针兼容?

我的阅读std::unique_ptr使我确信它(连同其他智能指针)绝对是项目内部指针的最佳选择(尤其是在优化编译器可以从 std::unique_ptr 中删除所有运行时成本之后吗?),但我还不确定在界面上做什么。我并不完全了解各种 C++ ABI 是如何工作的,所以如果这是一个愚蠢的问题,请多多包涵,但是可以将接受或返回指针的函数、具有指针成员的类/结构等替换为使用unique_ptr(也许使用unique_ptrrefs?)而不需要重新编译?C 代码可以与 C++ 接口交互unique_ptr吗?