abi相关内容

跨不同编译器的C ++库

我正在使用MinGW(4.8.0 dw2 posix)编写C ++库。 此库在使用另一个编译器的另一个C ++项目中使用。引用此我正在重新设计我的C ++库。我不知道该怎么办两件事: 我可以使用名称空间吗? 我注意到MinGW上的time_t是32位,而在msvc中是64位。我该怎么办? 1) 这是否破坏了ABI: // Window.h // MYLIB ..
发布时间:2020-10-24 01:52:42 C/C++开发

什么时候打破二进制兼容性

给我的印象是,无论何时执行以下操作之一: 添加新的公共虚拟方法 virtual void aMethod(); 添加新的公共非虚拟方法 void aMethod(); 从接口实现公共纯虚拟方法虚拟void aMethod覆盖; 实际上破坏了二进制兼容性,这意味着如果一个项目基于DLL的先前版本构建,则由于有新方法可用,因此将无法加载该项目。 根据我使用Visual Studi ..
发布时间:2020-10-24 01:28:42 C/C++开发

使用abi:cxx11的GCC未定义引用

我正在使用gcc 5.4.0 20160609(Ubuntu 5.4.0-6ubuntu1〜16.04.11)编译C ++程序。 然后将这些程序链接到使用 gcc版本4.8.4构建的库(Ubuntu 4.8.4) -2ubuntu1〜14.04.3)。 然后我得到未定义的引用链接错误: CMakeFiles / FOSSSim.dir / RigidBodies / Rigid ..
发布时间:2020-10-03 21:02:59 C/C++开发

AMD64 ABI中的空类会怎样?

我正在查看 AMD64 ABI 并且似乎没有指定如何传递空类类型。对于空的类成员函数,似乎像往常一样传递了 this ,但是对于空的类,Clang生成的代码似乎只是忽略了该类。根据AMD64 ABI,这是正确的吗? 解决方案 虽然不清楚问题到底是什么,但答案很明确:到C ++ ABI是什么: 对于C ++ ABI,我们将使用IA-64 C ++ ABI并将其实例化为 。该ABI的当 ..
发布时间:2020-09-27 23:33:03 C/C++开发

std :: regex和双重ABI

今天我发现了一个有趣的案例,即双重libstdc ++ ABI影响库的兼容性。 总之,我有两个库都使用std :: regex内部。一种是使用CXX11 ABI构建的,另一种则不是。当将这两个库链接到一个可执行文件中时,它会在启动时崩溃(在输入 main 之前)。 这些库是不相关的,并且不会公开提及任何 std :: 类型的接口。我认为这样的库应该不受双重ABI问题的影响。显然不是! ..
发布时间:2020-09-27 21:49:52 C/C++开发

如果clang ++和g ++不兼容ABI,则二进制共享库使用什么?

clang ++和g ++与ABI不兼容,即使是作为标准容器的核心,例如clang ++网站。 Debian附带了C ++共享库,即libboost等。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。安装clang时,debian不会删除系统中安装的每个C ++库的重复版本。 这是怎么回事? clang与发行版提供的C ++库链接的能力是否比(非常谨慎的)编 ..
发布时间:2020-09-27 06:26:10 C/C++开发

xmm8寄存器值是否在调用之间保留?

我使用Visual Studio 2017编译的Windows程序执行以下操作: 调用一个例程,该例程的默认参数值为35.05. 通过C接口初始化Java虚拟机 再次调用该例程,该例程的默认参数值为35.05. 在第一次调用中,默认参数获得正确的35.05.在第二个调用中,该值是垃圾. 我查看了生成的程序集,并在第一次调用时将默认参数35.05从内存位置复制到xmm8,并将其 ..
发布时间:2020-09-13 00:08:12 其他开发

x86_64 Linux syscall参数

我正在Linux上学习x86_64程序集,遇到了一些我希望可以清除的冲突信息.一方面,我已经阅读了有关syscall参数的信息,您将按rdi,rsi,rdx等顺序使用寄存器.但是另一方面,我读到您使用了寄存器rbx,rcx,rdx等.有人告诉我,这样做的原因是因为ABI,但我并不完全理解那是什么意思. 为什么要使用两种格式,哪种才是正确的格式? 解决方案 根据此Wikibooks页面 ..
发布时间:2020-09-12 22:28:50 服务器开发

为什么T *可以在寄存器中传递,而unique_ptr< T>却不能传递?不能?

我正在观看Chandler Carruth在CppCon 2019上的演讲: 没有零成本抽象 在其中的 中,他给出了一个示例,说明了在int*上使用std::unique_ptr会产生多少开销,这让他感到惊讶;该片段大约在时间点17:25开始. 您可以查看他的示例代码对(godbolt)的编译结果. org)-确实可以看到,编译器似乎不愿意传递unique_ptr值-实际 ..
发布时间:2020-09-12 21:43:25 C/C++开发

x86-64上的C ++:何时在寄存器中传递和返回结构/类?

假设在Linux上使用x86-64 ABI,那么在C ++中的什么条件下,结构会传递给寄存器中的函数还是传递给堆栈中的函数?在什么条件下将它们返回寄存器?答案是否会因课程而改变? 如果它有助于简化答案,则可以假定单个参数/返回值而没有浮点值. 解决方案 定义了ABI规范此处可用. 我认为读者已经习惯了文档的术语,并且可以对原始类型进行分类. 如果对象的大小大于两个八个字节 ..
发布时间:2020-09-12 21:36:47 C/C++开发

将Scala 2.12与Spark 2.x结合使用

在Spark 2.1 文档中,提到 Spark可在Java 7 +,Python 2.6 +/3.4 +和R 3.1+上运行.对于Scala API,Spark 2.1.0使用Scala 2.11.您将需要使用兼容的Scala版本(2.11.x). 在Scala 2.12 发布新闻中,还提到: 尽管Scala 2.11和2.12在很大程度上与源代码兼容,以促进交叉构建,但它们与二 ..
发布时间:2020-09-04 00:48:54 其他开发

arm64-v8a与armeabi-v7a兼容吗?

对于我的Android应用,我现在正在使用ABI"x86"和"armeabi". armeabi用于所有ARM设备,包括armv7a和arm64-v8a. 现在,我想删除"armeabi",然后继续"x86"和"armeabi-v7a". 我没有在文档中找到任何暗示,ARMv8也与ARMv7兼容-如果我不提供armeabi但现在提供armeabi,谁能确认我的应用仍可在运行arm64- ..
发布时间:2020-08-29 22:48:19 移动开发

将Nexus 5x更新为Oreo后出现错误INSTALL_FAILED_NO_MATCHING_ABIS

我正在使用旧的应用程序(我是从4.0开始的),在将nexus 5x升级到Oreo(8.0)之后,我遇到了一些问题. 我的Nexus 5x是x86设备,每次我尝试安装该APK进行调试时,都会收到所谓的错误"INSTALL_FAILED_NO_MATCHING_ABIS".我之前从未遇到过这个问题,所以我开始寻找信息,而我发现唯一有用的是: splits { abi { ..
发布时间:2020-08-29 01:48:36 移动开发