问题标签 [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.
linux - 如何以 Debian 稳定版为目标,但在测试中开发?
我们有一些专门为 Debian stable (x86) 开发的 C++ 应用程序。
目前,这些应用程序的开发也是使用 Debian stable (x86) 系统完成的,因此开发人员拥有与目标系统上相同的所有库版本。
有时,我还需要处理这些组件,它一直困扰着我,我被一个非常过时的 KDevelop 版本(4.0.1 与最新的 4.4.1)所困扰。我想使用更新的系统进行开发(如最新的 Ubuntu 或 Debian 测试),但如何创建适合目标系统的二进制文件?
有没有一些简单的方法可以告诉编译器/链接器使用仅在目标平台上可用的库版本?
我看了Emdebian和他们的交叉编译包,但我认为这对我不起作用。他们似乎只有针对 ARM 等其他架构的软件包。
c# - 更改子类型的函数的返回类型会破坏二进制兼容性吗?
让我们直接开始吧:
旧代码:
新代码:
显然这里应该没有问题,你在旧返回类型上所做的一切,你仍然可以在新返回类型上做, anyis
或as
cast 应该和以前一样......
那么我是否破坏了二进制兼容性,或者我可以将其作为次要版本发布而不打扰用户?
static-members - 在中间添加新的静态成员会破坏 C++ 库的二进制兼容性吗?
我有一个有很多静态成员的类,但是我在头文件的中间添加了新函数。
这会破坏二进制兼容性吗?客户端需要重新编译吗?
编辑(1):类只有静态函数,没有其他函数和数据成员
c++ - 纯虚函数和二进制兼容性
现在,我知道向非叶类添加新的虚函数通常是不好的,因为它破坏了任何尚未重新编译的派生类的二进制兼容性。但是,我的情况略有不同:
我有一个接口类和实现类编译成一个共享库,例如:
我的主应用程序使用这个共享库,基本上可以写成:
换句话说,应用程序没有任何派生自 的类Interface
,它只是使用它。
现在,假设我想用 超载Foo( uint16_t arg )
,Foo( uint32_t arg )
我可以安全地做:
并重新编译我的共享库而无需重新编译应用程序?
如果是这样,我需要注意任何不寻常的警告吗?如果没有,除了获取命中和升级库之外,我是否还有其他选择,从而破坏了向后兼容性?
c++ - 为什么是二进制兼容性?
我正在学习 PIMPL 成语。它的优点之一是二进制兼容性。我想知道二进制兼容性的优点是什么。谢谢!
vb6 - 确定二进制兼容性被破坏的原因
当我尝试重建我的一个 VB6 DLL 时,我收到一个警告:
“二进制兼容性 DLL 或 EXE 包含无法找到其定义的参数类型或返回类型”
我必须在选定的 DLL 中发布一些更改(方法内部的简单更改 - 根据此没有破坏兼容性)
我遵循的普遍接受的方法是将旧的 DLL 维护在一个单独的共享目录中,并在制作新的 DLL 时,将它们编译为设置为旧的 DLL 集的二进制兼容性。这样做是为了在我注册新的 DLL 时不更改 GUID。这些 GUID 用作其他 DLL 中的引用,我在发布期间没有干扰这些 DLL。
我很确定我没有添加任何东西来破坏二进制兼容性规则(签名、公共方法、变量等没有变化)为什么会发生这个错误?
我是不是因为不检查一些基本的东西而成为菜鸟?从早上开始就挠头。任何帮助深表感谢。
编辑:如果我的签名有任何更改,有没有一种方法可以在不比较代码的情况下知道?
c++ - C++ 中的部分类
我想避免重新编译包含公共头文件的所有内容,只是因为类定义的私有部分发生了更改。我正在研究 PIMPL 之外的其他选项。
这是我尝试过的:
我创建了一个包含 A 类的库:
A_p.h包含 A 类的私有部分
啊公共头文件:
A.cpp
然后,我创建了一个 Win32 控制台项目,其中包括公共标头 (Ah) 和针对 .lib 文件的链接。
一切似乎都有效,但我想知道一路上是否有任何陷阱。谁能详细说明这一点?
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
有人可以为我解释一下这种行为吗?
谢谢你。
c++ - std::unique_ptr ABI 是否与原始指针兼容?
我的阅读std::unique_ptr
使我确信它(连同其他智能指针)绝对是项目内部指针的最佳选择(尤其是在优化编译器可以从 std::unique_ptr 中删除所有运行时成本之后吗?),但我还不确定在界面上做什么。我并不完全了解各种 C++ ABI 是如何工作的,所以如果这是一个愚蠢的问题,请多多包涵,但是可以将接受或返回指针的函数、具有指针成员的类/结构等替换为使用unique_ptr
(也许使用unique_ptr
refs?)而不需要重新编译?C 代码可以与 C++ 接口交互unique_ptr
吗?