像GCC/VC这样的流行实现使用多态对象的第一个size_t空间作为指针,指向一个vtable结构。这是最新的C++ABI的一部分吗?RTTI的实现如何,C++ABI有没有规定如何实现?谢谢 最佳答案 不,C++标准没有指定这些应该如何实现。没有单一的C++ABI。 关于c++-C++ABI是否指定vTable和RTTI信息应该如何存在?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questio
我在查看C++的GCC手册时,发现了以下引述:Version0referstotheversionconformingmostcloselytotheC++ABIspecification.Therefore,theABIobtainedusingversion0willchangeindifferentversionsofG++asABIbugsarefixed.(source)可以看出,上述段落引用了某种看似标准的C++ABI。然而,据我了解,不存在这样的ABI。这段话在说什么?一个好的答案将给出尽可能详尽的解释。将“C++ABI规范”放入我首选的搜索引擎中没有任何用处。
情况是这样的,我有一个使用最新GCC(4.3.3)的C++代码库,但我需要链接到一个使用GCC3.2.3构建的旧库。没有可用的更新版本的库,我离不开它,而且它是封闭源代码,因此无法重建。这似乎是一个问题,因为GCC4.3.3和3.2.3之间存在ABI不兼容问题,因此我正在尝试查看解决此问题的选项。一些额外的细节:我可以使用-fabi-version=1重建代码库中的所有内容以获得正确的ABI版本,但我依赖于libstdc++版本6中的一些更新功能。代码库之外的所有C++库依赖项都是开源的,因此我可以根据需要重建它们,但这个库除外。许多无法重建或难以重建的C库依赖项。旧库似乎依赖于某些l
我从GitHub下载了OpenCV2.4.13版本.然后我使用CMake-gui为android配置了CMake项目。有一个名为ANDROID_ABI的变量,我可以使用下拉列表为其选择值。但在此列表中,我只能选择armeabi、带VFP的armeabi-v6、armeabi-v7a、带NEON的armeabi-v7a、带VFPV3的armeabi-v7a。我可以使用CMake控制台为arm64配置和生成项目,或者我可以修改cmake脚本并手动列出它。但是,当我尝试构建生成的项目时,出现错误unknowntypename'__uint128_t'__uint128_t。所以我认为我无法从
我试图了解ABI(比如SystemV)和C++标准的区别。所以C++标准只是确定合法的C++,以便编译器可以将其转换为足够的汇编代码。ABI然后规范这个汇编代码如何与x86架构交互?这是两者之间更高层次的比较吗?我问的原因是对低延迟软件感兴趣,我想知道读取ABI会包含多少值(value)? 最佳答案 该标准根据您编写的代码定义程序应该做什么。ABI定义了特定平台的实现方式,以便在不同运行(可能由不同的编译器/版本)编译的代码可以交互。也就是说,当你写:voidf(inti){std::cout标准定义了行为:对该函数的调用将导致参数
来自themanual:IntheGCC5.1releaselibstdc++introducedanewlibraryABIthatincludesnewimplementationsofstd::stringandstd::list.Thesechangeswerenecessarytoconformtothe2011C++standardwhichforbidsCopy-On-Writestringsandrequiresliststokeeptrackoftheirsize.可以使用_GLIBCXX_USE_CXX11_ABI宏来控制库header是使用旧ABI还是新ABI,而
是well-establishedandacanonicalreferencequestion在C++中,在手动编写代码时,结构和类几乎可以互换。但是,如果我想链接到现有代码,如果我将一个结构体重新声明为一个类,我是否可以预期它会产生任何不同(即中断、鼻腔恶魔等),反之亦然,在生成原始代码后的header中?所以情况是类型被编译为结构(或类),然后我将头文件更改为其他声明,然后再将其包含在我的项目中。真实世界的用例是我使用SWIG自动生成代码,它根据给定的结构或类生成不同的输出;我需要将一个更改为另一个以使其输出正确的界面。例子是here(Irrlicht,SVertexManipul
今天我发现了一个有趣的案例,双libstdc++ABI影响库的兼容性。长话短说,我有两个库都在内部使用std::regex。一个是使用CXX11ABI构建的,一个不是。当这两个库在一个可执行文件中链接在一起时,它会在启动时崩溃(在输入main之前)。这些库是不相关的,并且不公开提及任何std::类型的接口(interface)。我认为这样的库应该不受双重ABI问题的影响。显然不是!问题可以通过这种方式轻松重现://file.cc#includestaticstd::regexfoo("(a|b)");//main.ccintmain(){}//build.shg++-onew.ofil
我主要是一个C++人。由于C++缺少官方ABI,我总是使用类似COM的方法来设计支持多个编译器的组件。最近我遇到了一个问题,即Objective-C是否会替代类COM方法。显然,要让Objective-C成为替代品,需要一个稳定的ABI,因此我想知道是否存在用于Objective-C的稳定ABI(在所有主要操作系统[OSX、GNU/Linux、Windows]上)以及它有多容易它将使用Objective-C(++)作为不同编译器创建的组件之间的“粘合剂”。编辑:正如NikolaiRuhe指出的那样,对COM的简短描述可能会有所帮助。COM本质上是一种“二进制标准”,允许混合不同编译器(
我有一个混合使用C++、Objective-C和Swift的多线程OSX应用程序。当我的应用程序关闭时,我在Xcode调试器窗口中看到:libc++abi.dylib:Purevirtualfunctioncalled!我知道这个错误通常是由在C++类构造函数或析构函数中调用虚函数引起的。有没有简单的方法可以找到它的位置?我所说的“简单”是指“不分析每个具有虚函数的类的每个构造函数和析构函数的每一行的调用树”。我没有看到堆栈跟踪。打印此消息时,调试器不会停止程序。从我的应用委托(delegate)的applicationDidTerminate方法记录的消息在此消息之前。我尝试在“所有