在Windows上,当使用g++4.6(mingw)和-std=c++0x并链接第三方静态库(由供应商提供以用于mingw)时,应用程序运行良好。当我切换到g++4.7.2(mingw)以便我可以使用-std=c++11时,应用程序构建正常但在运行时崩溃。如果我注释掉对供应商提供的库的调用,那么它不会崩溃。我询问了图书馆供应商的客户支持,被告知不支持。我的问题是,在使用较新版本的g++编译器时“是否存在任何ABI不兼容问题”?它不向后兼容吗?较新版本的编译器不应该与现有和遗留的第3方静态库一起使用吗?请注意,这仅发生在Windows(mingw)平台上。在Linux上运行良好。我已经添
我在64位Windows7上运行。我想获取与某些NTFS系统文件关联的FileID。其中一些(“$Mft”、“$MftMirr”)我可以打开,但其他(“$LogFile”和“$Bitmap”)因“拒绝访问”错误或无效参数(“$Volume”)而失败。我试过以管理员身份执行此操作并作为本地服务运行,但它们仍然失败。我正在使用以下内容:/*openthefileforcheckingtheFileID*/h=CreateFileW(argv[i],//_In_LPCTSTRlpFileName,FILE_READ_ATTRIBUTES,//_In_DWORDdwDesiredAccess,
我有以下情况(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
这个问题专门针对不可移植的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
我正在阅读ItaniumABI上面写着Itisintendedthattwotype_infopointerspointtoequivalenttypedescriptionsifandonlyifthepointersareequal.Animplementationmustsatisfythisconstraint,e.g.byusingsymbolpreemption,COMDATsections,orothermechanisms.有谁知道在使用动态加载库时如何在流行平台(例如使用GCC和GNUbinutils的Linux)上实际实现这一点的详细信息?它有多可靠?此外,我的印象
考虑以下代码(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::
我正在开发一个共享库。假设我有以下类定义:classMyClass{public://publicinterfaceprivate:virtualvoidfoo1(int);virtualvoidfoo2(int,bool);virtualvoidfoo3(double);virtualvoidreserved1();virtualvoidreserved2();virtualvoidreserved3();classImpl;Impl*impl_;};reserved#虚拟方法不会在客户端代码中被覆盖,也不会从任何地方调用。它们充当future扩展的占位符。假设我将其中一个保留方法替
什么是ABI,为什么C++没有标准的ABI,如果有它为什么重要? 最佳答案 ABI是一个ApplicationBinaryInterface.它描述了如何组织和访问应用程序二进制文件的标准。标准化将允许多个编译器构建彼此完全兼容的二进制文件,或者可能允许单个可执行文件在各种平台上运行而无需重新编译等。 关于c++-什么是ABI,为什么C++没有标准的ABI,如果有又有什么关系呢?,我们在StackOverflow上找到一个类似的问题: https://stac
我试图了解如何解决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
我目前正在我的Ubuntu机器上对RaspberryPi执行一些交叉编译测试。我目前的理解是RaspberryPi支持硬件浮点,默认的RaspbianOS镜像是使用硬件浮点(armhf)构建的。正确吗?如果我使用“arm-linux-gnueabi”工具链(未指定任何ARM标志)构建我的应用程序,那么我的应用程序将使用软浮点ABI。正确吗?在这种情况下,我的所有依赖项也必须使用相同的ABI才能正确链接。正确吗?如果我的应用程序使用软浮点ABI,那么我的应用程序肯定链接到软浮点ABI共享标准库。当我在我的RaspberryPi上运行我的应用程序时,一切都按预期工作。如果Raspbian使