草庐IT

ABI_VOLUME_EXPOSURE

全部标签

c++ - 升级到 g++ 4.7(支持 c++11): any ABI incompatibility?

在Windows上,当使用g++4.6(mingw)和-std=c++0x并链接第三方静态库(由供应商提供以用于mingw)时,应用程序运行良好。当我切换到g++4.7.2(mingw)以便我可以使用-std=c++11时,应用程序构建正常但在运行时崩溃。如果我注释掉对供应商提供的库的调用,那么它不会崩溃。我询问了图书馆供应商的客户支持,被告知不支持。我的问题是,在使用较新版本的g++编译器时“是否存在任何ABI不兼容问题”?它不向后兼容吗?较新版本的编译器不应该与现有和遗留的第3方静态库一起使用吗?请注意,这仅发生在Windows(mingw)平台上。在Linux上运行良好。我已经添

windows - 如何打开 NTFS 元数据/系统文件 : $LogFile, $Volume,$Bitmap?

我在64位Windows7上运行。我想获取与某些NTFS系统文件关联的FileID。其中一些(“$Mft”、“$MftMirr”)我可以打开,但其他(“$LogFile”和“$Bitmap”)因“拒绝访问”错误或无效参数(“$Volume”)而失败。我试过以管理员身份执行此操作并作为本地服务运行,但它们仍然失败。我正在使用以下内容:/*openthefileforcheckingtheFileID*/h=CreateFileW(argv[i],//_In_LPCTSTRlpFileName,FILE_READ_ATTRIBUTES,//_In_DWORDdwDesiredAccess,

c++ - gcc5.2 abi 更改 -> 兼容性有保证吗?

我有以下情况(Ubuntu15.10和Debian测试)我有一个没有使用cxx11编译的库A和一个使用-std=c++11的库B。B包含并链接到A,A使用boost。如果我将B链接到A,A创建的应用程序会在动态加载期间崩溃。如果我编译不带cxx11的A或带cxx11的B,一切正常。我的问题:据我所知,ABI命名空间附加组件应该可以保证这类问题。我错了吗?我创建了一个示例项目来阐明问题:https://github.com/goldhoorn/sandbox/tree/gcc5.2-issue测试1失败,其他测试通过。GDB告诉我:ProgramreceivedsignalSIGSEGV

c++ - 在 MSVC ABI 中,如何可靠地找到仅给出 (void*) 的 vtable?

这个问题专门针对不可移植的MSVCABI内容。我正在尝试用显然不可移植但不神奇的C++编写与C++的typeid等效的代码。对于ItaniumABI(在Linux/Mac上使用),它非常简单:conststd::type_info&dynamicast_typeid(void*mdo){std::type_info**vptr=*reinterpret_cast(mdo);std::type_info*typeinfo_ptr=vptr[-1];return*typeinfo_ptr;}所以现在我正在查看64位MSVCABI,该死的,我被难住了。对于非常简单的类,即以偏移量0处的vfp

c++ - Itanium 和 MSVC ABI 中跨模块边界的 RTTI

我正在阅读ItaniumABI上面写着Itisintendedthattwotype_infopointerspointtoequivalenttypedescriptionsifandonlyifthepointersareequal.Animplementationmustsatisfythisconstraint,e.g.byusingsymbolpreemption,COMDATsections,orothermechanisms.有谁知道在使用动态加载库时如何在流行平台(例如使用GCC和GNUbinutils的Linux)上实际实现这一点的详细信息?它有多可靠?此外,我的印象

c++ - std::string & 作为 gcc 5 中的模板参数和 abi_tag

考虑以下代码(test1.cpp):#includeexternstd::stringtest_string;templateclasstest{public:staticvoidbar(){}};std::stringtest_string("teststring");voidfoo(){test::bar();}现在让我们交换最后两行代码(test2.cpp)的顺序:#includeexternstd::stringtest_string;templateclasstest{public:staticvoidbar(){}};voidfoo(){test::bar();}std::

c++ - 未使用的私有(private)虚拟方法是否允许在不破坏 ABI 兼容性的情况下进行 future 扩展?

我正在开发一个共享库。假设我有以下类定义:classMyClass{public://publicinterfaceprivate:virtualvoidfoo1(int);virtualvoidfoo2(int,bool);virtualvoidfoo3(double);virtualvoidreserved1();virtualvoidreserved2();virtualvoidreserved3();classImpl;Impl*impl_;};reserved#虚拟方法不会在客户端代码中被覆盖,也不会从任何地方调用。它们充当future扩展的占位符。假设我将其中一个保留方法替

c++ - 什么是 ABI,为什么 C++ 没有标准的 ABI,如果有又有什么关系呢?

什么是ABI,为什么C++没有标准的ABI,如果有它为什么重要? 最佳答案 ABI是一个ApplicationBinaryInterface.它描述了如何组织和访问应用程序二进制文件的标准。标准化将允许多个编译器构建彼此完全兼容的二进制文件,或者可能允许单个可执行文件在各种平台上运行而无需重新编译等。 关于c++-什么是ABI,为什么C++没有标准的ABI,如果有又有什么关系呢?,我们在StackOverflow上找到一个类似的问题: https://stac

c++ - 如何在 GCC 5 中处理双 ABI?

我试图了解如何解决GCC5中引入的双ABI的问题。但是,我没能做到。这是一个非常简单的重现错误的例子。我使用的GCC版本是5.2。如您所见,我的主要功能(在main.cpp文件中)非常简单://main.cpp#include#includeintmain(){std::stringmessage="SUCCESS!";std::cout当我打字时/home/aleph/gcc/5.2.0/bin/g++main.cpp我收到以下错误消息:/tmp/ccjsTADd.o:Infunction`main':main.cpp:(.text+0x26):undefinedreferencet

c++ - Raspberry Pi ARM Float ABI 兼容性

我目前正在我的Ubuntu机器上对RaspberryPi执行一些交叉编译测试。我目前的理解是RaspberryPi支持硬件浮点,默认的RaspbianOS镜像是使用硬件浮点(armhf)构建的。正确吗?如果我使用“arm-linux-gnueabi”工具链(未指定任何ARM标志)构建我的应用程序,那么我的应用程序将使用软浮点ABI。正确吗?在这种情况下,我的所有依赖项也必须使用相同的ABI才能正确链接。正确吗?如果我的应用程序使用软浮点ABI,那么我的应用程序肯定链接到软浮点ABI共享标准库。当我在我的RaspberryPi上运行我的应用程序时,一切都按预期工作。如果Raspbian使