abi相关内容
我正在使用MinGW(4.8.0 dw2 posix)编写C ++库。 此库在使用另一个编译器的另一个C ++项目中使用。引用此我正在重新设计我的C ++库。我不知道该怎么办两件事: 我可以使用名称空间吗? 我注意到MinGW上的time_t是32位,而在msvc中是64位。我该怎么办? 1) 这是否破坏了ABI: // Window.h // MYLIB
..
给我的印象是,无论何时执行以下操作之一: 添加新的公共虚拟方法 virtual void aMethod(); 添加新的公共非虚拟方法 void aMethod(); 从接口实现公共纯虚拟方法虚拟void aMethod覆盖; 实际上破坏了二进制兼容性,这意味着如果一个项目基于DLL的先前版本构建,则由于有新方法可用,因此将无法加载该项目。 根据我使用Visual Studi
..
#include #include 使用命名空间std; vector> e; void f(unique_ptr
..
我正在使用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
..
struct Big { int a [8]; }; void foo(Big a); Big getStuff(); void test1(){ foo(getStuff()); } 进行编译(在Linux上对x86_64使用clang 6.0.0,因此System V ABI,标志: -O3 -march = broadwell )到 test
..
我正在查看 AMD64 ABI 并且似乎没有指定如何传递空类类型。对于空的类成员函数,似乎像往常一样传递了 this ,但是对于空的类,Clang生成的代码似乎只是忽略了该类。根据AMD64 ABI,这是正确的吗? 解决方案 虽然不清楚问题到底是什么,但答案很明确:到C ++ ABI是什么: 对于C ++ ABI,我们将使用IA-64 C ++ ABI并将其实例化为 。该ABI的当
..
今天我发现了一个有趣的案例,即双重libstdc ++ ABI影响库的兼容性。 总之,我有两个库都使用std :: regex内部。一种是使用CXX11 ABI构建的,另一种则不是。当将这两个库链接到一个可执行文件中时,它会在启动时崩溃(在输入 main 之前)。 这些库是不相关的,并且不会公开提及任何 std :: 类型的接口。我认为这样的库应该不受双重ABI问题的影响。显然不是!
..
clang ++和g ++与ABI不兼容,即使是作为标准容器的核心,例如clang ++网站。 Debian附带了C ++共享库,即libboost等。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。安装clang时,debian不会删除系统中安装的每个C ++库的重复版本。 这是怎么回事? clang与发行版提供的C ++库链接的能力是否比(非常谨慎的)编
..
如果我得到一个bool变量并将其第二位设置为1,则该变量同时计算为true和false.使用带有-g选项(gcc-v6.3.0/Linux/RHEL6.0-2016-x86_64/bin/g++ -g main.cpp -o mytest_d)的gcc6.3编译以下代码,然后运行可执行文件.您得到以下内容. T如何同时等于true和false? value bits
..
我正在根据AMD64 SysV ABI在组装中使用cpuid实现功能.我需要在函数本身中使用2个临时寄存器:第一个用于累加返回值的寄存器,第二个作为计数器. 我的函数当前显示为: ;zero argument function some_cpuid_fun: push rbx xor r10d, r10d ;counter initial value xor r11d,
..
考虑以下简单功能: struct Foo { int a; int b; int c; int d; int e; int f; }; Foo foo() { Foo f; f.a = 1; f.b = 2; f.c = 3; f.d = 4; f.e = 5; f.f = 6; return f; } 它将生成以下程序集:
..
我使用Visual Studio 2017编译的Windows程序执行以下操作: 调用一个例程,该例程的默认参数值为35.05. 通过C接口初始化Java虚拟机 再次调用该例程,该例程的默认参数值为35.05. 在第一次调用中,默认参数获得正确的35.05.在第二个调用中,该值是垃圾. 我查看了生成的程序集,并在第一次调用时将默认参数35.05从内存位置复制到xmm8,并将其
..
我正在Linux上学习x86_64程序集,遇到了一些我希望可以清除的冲突信息.一方面,我已经阅读了有关syscall参数的信息,您将按rdi,rsi,rdx等顺序使用寄存器.但是另一方面,我读到您使用了寄存器rbx,rcx,rdx等.有人告诉我,这样做的原因是因为ABI,但我并不完全理解那是什么意思. 为什么要使用两种格式,哪种才是正确的格式? 解决方案 根据此Wikibooks页面
..
我正在观看Chandler Carruth在CppCon 2019上的演讲: 没有零成本抽象 在其中的 中,他给出了一个示例,说明了在int*上使用std::unique_ptr会产生多少开销,这让他感到惊讶;该片段大约在时间点17:25开始. 您可以查看他的示例代码对(godbolt)的编译结果. org)-确实可以看到,编译器似乎不愿意传递unique_ptr值-实际
..
假设在Linux上使用x86-64 ABI,那么在C ++中的什么条件下,结构会传递给寄存器中的函数还是传递给堆栈中的函数?在什么条件下将它们返回寄存器?答案是否会因课程而改变? 如果它有助于简化答案,则可以假定单个参数/返回值而没有浮点值. 解决方案 定义了ABI规范此处可用. 我认为读者已经习惯了文档的术语,并且可以对原始类型进行分类. 如果对象的大小大于两个八个字节
..
摘要:我正在查看汇编代码以指导优化,并在将int32添加到指针时看到许多符号或零扩展名. void Test(int *out, int offset) { out[offset] = 1; } ------------------------------------- movslq %esi, %rsi movl $1, (%rdi,%rsi,4) ret 起初,我以为
..
以下链接说明了UNIX(BSD风格)和ampx的x86-32系统调用约定. Linux: http://www.int80h.org/bsdasm/#system-calls http://www .freebsd.org/doc/en/books/developers-handbook/x86-system-calls.html 但是UNIX&上的x86-64系统调用约定是什么
..
在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在很大程度上与源代码兼容,以促进交叉构建,但它们与二
..
对于我的Android应用,我现在正在使用ABI"x86"和"armeabi". armeabi用于所有ARM设备,包括armv7a和arm64-v8a. 现在,我想删除"armeabi",然后继续"x86"和"armeabi-v7a". 我没有在文档中找到任何暗示,ARMv8也与ARMv7兼容-如果我不提供armeabi但现在提供armeabi,谁能确认我的应用仍可在运行arm64-
..
我正在使用旧的应用程序(我是从4.0开始的),在将nexus 5x升级到Oreo(8.0)之后,我遇到了一些问题. 我的Nexus 5x是x86设备,每次我尝试安装该APK进行调试时,都会收到所谓的错误"INSTALL_FAILED_NO_MATCHING_ABIS".我之前从未遇到过这个问题,所以我开始寻找信息,而我发现唯一有用的是: splits { abi {
..