binary-compatibility相关内容

关于Linux的二进制兼容性

如果我得到了一些由Ubuntu构建的C ++代码,比如说,Ubuntu上的GCC 4.8,代码没有GUI /接口,只调用标准Linux库,那么二进制文件可以在RHEL 5/6上运行, ? 解决方案 通常情况下它不行。它会抱怨libc太旧,比如一个。 如果您静态链接libstdc ++并小心避免更新的glibc功能,那么您可能可以避开它。后者并不总是可能的。静态链接libc不被官方支持 ..
发布时间:2018-04-20 16:52:21 服务器开发

GCC 4.0,4.2和LLVM ABI兼容性

Xcode(gcc 4.0,4.2和llvm)支持三种主要的编译器风格二进制兼容吗?使用最新的Xcode工具加快多库项目的速度时,应该注意什么类型的陷阱和转角情况? 解决方案 Clang与ABI生成的代码兼容。 Clang还包含一些较新的Objective-C ABI的实验性支持,但编译新的ABI需要标记,生成的代码可以与GCC生成的代码混合使用。 ..
发布时间:2018-04-20 16:23:53 其他开发

放弃.NET中标准的EventHandler模​​式会失去什么?

在.NET中有一个标准的事件模式 - 它们使用一个委托类型,它接受一个名为sender的普通对象,然后在第二个参数中使用实际的“payload”这应该从 EventArgs 中导出。 第二个参数的原理来自 EventArgs 似乎很清楚(请参阅 .NET Framework标准库注释参考)。它旨在确保事件接收器和源之间的二进制兼容性随着软件的发展。对于每个事件,即使它只有一个参数,我们派生一 ..
发布时间:2017-08-31 02:20:25 C#/.NET

__cdecl或__stdcall在Windows上?

我正在开发一个用于Windows的C ++库,它将作为一个DLL进行分发。我的目标是最大化二进制互操作性;更准确地说,我的DLL中的函数必须可以从编译多个版本的MSVC ++和MinGW的代码中使用,而无需重新编译DLL。不过,我很困惑,哪个电话会议是最好的, cdecl 或 stdcall 。 有时我会听到“C调用约定是唯一一个保证是相同的编译器“,与”“的解释形成对照,解释 cdecl ..
发布时间:2017-06-07 22:06:30 C/C++开发

放弃.NET中标准的EventHandler模​​式会失去什么?

在.NET中有一个标准的事件模式 - 它们使用一个委托类型,它接受一个名为sender的普通对象,然后在第二个参数中使用实际的“payload”这应该从 EventArgs 中导出。 第二个参数的原理来自 EventArgs 似乎很清楚(请参阅 .NET Framework标准库注释参考)。它旨在确保事件接收器和源之间的二进制兼容性随着软件的发展。对于每个事件,即使它只有一个参数,我们派生一 ..
发布时间:2017-04-22 20:01:29 C#/.NET

什么原因导致java.lang.IncompatibleClassChangeError?

我打包一个Java库作为JAR,当我尝试从它调用方法时,它抛出许多 java.lang.IncompatibleClassChangeError s。这些错误似乎随机出现。 解决方案 这意味着你对库进行了一些不兼容的二进制修改而不重新编译客户端代码。 Java语言规范§13详细说明了所有这些更改,最显着的是,将非私有字段/方法更改为 static ,反之亦然。 p> 根据新库重新编译 ..

如何保留呈现COM接口的.NET程序集的二进制兼容性?

我们开发了一个.NET程序集,用于存储语言翻译信息,并且需要由VB6应用程序使用。 我们希望能够更改翻译信息而不必重新编译应用程序。 翻译由一个名为LanguageServices的两文件部分类提供。 一个文件是不变的库方法,另一个是resx文件中的所有自动生成的属性,regx是从语言翻译信息数据库生成的。 这一切都产生于需要一个翻译的中央数据库,可以编程“扁平化”到我们的 ..
发布时间:2016-12-18 18:56:08 C#/.NET

COM接口和二进制兼容性

在白天工作,我工作在VB6(我知道,但不要模仿的痛苦...)应用程序,使用我们编写的许多库(也在永远卓着的VB6)。其中一个支持库有通过公共属性暴露的私有成员的负载,我被要求删除属性,并将私有成员变量提升为与原始属性同名的公共字段。 现在,我不是COM专家,但我的印象是一个类中的每个暴露的项目都有它自己的GUID。因为我们将从一个情况,其中每个值从2 Guids(Property Get和P ..
发布时间:2016-12-18 18:35:57 .NET组件控件

可以使用内联命名空间来保持共享库中的向后兼容性?

C ++内联命名空间的基本原理是源和二进制兼容性(参见Herb Sutter的论文 N2535 ),但在引入内联命名空间时,我还无法找到现有库的保留二进制兼容性的好例子,是可能的。 (有关更多信息和源兼容性示例,请参阅 this question ) (解决相关问题,使用内联命名空间引入不兼容性,请参阅这个问题) 如果这是我们当前的库(例如mylib.dll),它是与客户共享的, ..
发布时间:2016-10-28 05:33:16 C/C++开发

C ++异常二进制兼容性

我的项目使用2个不同的C ++编译器,g ++和nvcc(cuda编译器)。 我注意到从nvcc对象文件抛出的异常没有在g ++对象文件中捕获。 是C ++异常,应该是在同一台机器上兼容二进制? 可能会导致这种行为? try {kernel_ = new cuda :: Kernel } catch(...){kernel_ = NULL; } // nvcc对象 ..
发布时间:2016-10-27 06:35:45 C/C++开发

STL容器的二进制兼容性

假设我在C ++中写了一个DLL,并希望导出一个使用std :: vector参数的方法。 解决方案 如果您的意思是更新版本的版本之间包含的版本编译器,是的,它可以(并将)在某些情况下工作,但你必须小心。还有一些特殊情况,例如英特尔和微软的Windows编译器 - 英特尔是非常小心保持二进制兼容性,至少当我试过它,它总是工作相当不错。 对于大多数其他情况,答案是否定的。 ..
发布时间:2016-10-24 13:28:31 C/C++开发

Dll编译器之间的兼容性

有什么方法可以让c ++ dll与不同的编译器建立兼容?类可以有工厂方法创建和销毁,所以每个编译器可以使用自己的新/删除(因为不同的运行时有自己的堆)。 我试过下面的代码,但它崩溃的第一个成员方法: interface.h #pragma once class IRefCounted { public: virtual〜IRefCounted(){} vir ..
发布时间:2016-10-23 12:19:46 C/C++开发

纯虚函数和二进制兼容性

现在,我知道向非叶类添加新的虚函数通常是不好的,因为它破坏了没有重新编译的任何派生类的二进制兼容性。但是,我有一个稍微不同的情况: 我有一个接口类和实现类编译成共享库,例如: class Interface { public: static Interface * giveMeImplPtr(); ... virtual void Foo(uint16_t arg)= 0 ..
发布时间:2016-10-19 19:31:11 C/C++开发

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

我正在设计一个用于C ++库的API,它将分布在dll / shared对象中。库包含具有虚函数的多态类。我担心,如果我公开这些虚拟函数的DLL API,我削减了扩展相同的类与更多的虚拟函数的可能性,而不破坏与为以前的版本的库的应用程序的二进制兼容性。 一个选择是使用 PImpl 成语隐藏所有具有虚拟函数,但这似乎也有它的局限性:这种方式应用程序失去子类的类和覆盖虚拟方法的可能性。 如 ..
发布时间:2016-10-14 23:01:01 C/C++开发

__cdecl或__stdcall在Windows上?

我目前正在开发一个用于Windows的C ++库,它将作为一个DLL分发。我的目标是最大化二进制互操作性;更确切地说,我的DLL中的函数必须可以从使用多个版本的MSVC ++和MinGW编译的代码中使用,而无需重新编译DLL。但是,我对哪种调用约定最好感到困惑, cdecl 或 stdcall 。 有时我会听到类似“C调用约定是唯一一个保证与编译器相同的语句”,这与“ cdecl 的解释有一 ..
发布时间:2016-10-14 22:54:03 C/C++开发

我会失去,放弃.NET中的标准事件处理程序的模式是什么?

有对.NET中的事件的标准模式 - 他们用委托类型,需要一个普通的对象调用发送者,然后实际的“有效载荷”的第二个参数,这应该从 EventArgs的得到。 第二个参数的基本原理,从正在导出EventArgs的似乎非常清楚(见 .NET框架标准库注释的参考)。它的目的是确保事件汇和源作为软件的发展之间的二进制兼容性。对于每一个事件,即使只有一个参数,我们推​​导出具有包含这样的说法单个属性自定 ..
发布时间:2016-08-30 15:40:21 C#/.NET

用C交叉编译的二进制兼容性

我需要验证,我有怀疑的东西。如果共享库文件(.dll)是用C写的,与C99标准编译器编译下。说MinGW的。然后在我的经验是二进制兼容的,因此从任何其他编译器可用。说MS Visual Studio中。我在我的经验说,因为我已经尝试过成功不止一次。但我需要验证,如果这是一个规律。 和另外我想问一下,如果它的确是这样,那么为什么图书馆完全用C写成,如OpenCV的例如没有为每一个不同的操作系统提供 ..
发布时间:2016-08-21 19:53:05 C/C++