草庐IT

android - Galaxy Nexus - 安装时选择了错误的 CPU ABI

在我的产品中,我发现当我将APK文件安装到运行android4.0.1的GalaxyNexus时,安装了不正确的.so文件。我有一个所谓的“胖”APK,其中包含armeabi、armeabi-v7a和x86的native代码。我发现armeabiCPUABI的.so文件是从APK文件而不是armeabi-v7a.so文件中提取的。如果我从APK文件中删除“armeabi”文件夹,则galaxynexus会正确安装armeabi-v7a文件夹中的.so文件。我已验证nexus的CPUABI是“armeabi-v7a”,它的辅助ABI是“armeabi”。有没有其他人看到这个问题,他们有没

在 build.gradle 中使用 CPU ABI split 时不考虑 Android 产品风格

我想根据http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits根据CPUABI进行APK拆分,但是我只想为特定的产品风格拆分APK。所以我的build.gradle文件具有以下产品风格plain和market。实际上,我希望在构建market风格时执行APK拆分。android{productFlavors{plain{}market{splits{abi{enabletruereset()include'armeabi','armeabi-v7a','x86','mips'universalA

c++ - 从函数返回类型中删除 const 是否会破坏 ABI?

假设我有一个库声明了一个返回const类型的函数:classFoo{...};constFoomakeFoo();现在我想从makeFoo()返回类型中删除const(参见我的previousquestion)。我可以从头文件和cpp文件中删除const,重建库,并将我的代码链接到新库。但是,我也有动态链接到这个库的旧代码,我希望它继续与新版本的库一起工作。那么,第一个问题,从返回类型中删除const会破坏ABI吗?第二个问题,实际代码有很大不同:它是一个模板类,有一个静态成员函数,然后显式实例化://fooMaker.htemplateclassFooMaker{public:sta

c++ - 通过 Itanium ABI 分配的异常内存是否有任何对齐保证?

ItaniumABI指出异常的内存是通过调用__cxa_allocate_exception(size)获得的。返回内存的对齐保证是什么? 最佳答案 Section1.2inchapter4说:Theunwindinterfaceusesapointertoanexceptionheaderobjectasitsrepresentationofanexceptionbeingthrown.Ingeneral,thefullrepresentationofanexceptionobjectislanguage-andimplement

c++ - boost 是否使用 C++11 "inline namespaces"来避免运行时出现 ABI 不兼容错误?

C++11具有称为“内联命名空间”的功能,它允许作者在链接时强制执行ABI兼容性,而无需篡改API。例如,来自@HowardHinnant的这些有用的答案解释了libc++如何使用内联命名空间:Usinglibstdc++compiledlibrarieswithclang++-stdlib=libc++Whycan'tclangwithlibc++inc++0xmodelinkthisboost::program_optionsexample?我的问题是:boost是否利用了这个C++11特性?看起来一些boost开发者至少是thinking最终一次使用它。但是那个线程很旧。它曾经发

c++ - 向函数添加具有默认值的参数是否会破坏 ABI?

标题说明了一切。我将向具有默认值的类的成员函数添加一个参数。该参数属于非平凡类型。这会破坏ABI吗?假设我的新库版本将是M.m.0,它应该可以作为所有使用M.m-1.x的链接应用程序的直接替代品。示例代码://Thesearesomeclasses:baseandchild:publicbase/*Version1.2.3*/classfoo(){public:voiddo_that_stuff(conststd::stringa);}/*Version1.3.0*/classfoo(){public:voiddo_that_stuff(conststd::stringa,constb

c++ - 将枚举器添加到枚举中会破坏 ABI 吗?

特别是,我在库界面中得到了以下代码:typedefenum{state1,state2,state3,state4,state5,state_error=-1,}State;我严格禁止破坏ABI。但是,我想添加state6和state7。它会破坏ABI吗?我找到了here一些提示,但我有点怀疑这是不是我的情况?Youcan...appendnewenumeratorstoanexistingenum.Exeption:ifthatleadstothecompilerchoosingalargerunderlyingtypefortheenum,thatmakesthechangebin

c++ - 在独立类中重新排序公共(public)非虚拟方法是否会破坏 ABI?

更改独立类中公共(public)非虚拟非内联重载方法的顺序是否会破坏ABI?之前:classMyFinalClass{public://...voiddoSomething(charc,inti,intn);voiddoSomething(charc,inti);//...};之后:classMyFinalClass{public://...voiddoSomething(charc,inti);voiddoSomething(charc,inti,intn);//...};谢谢! 最佳答案 函数通过它们的名称和签名链接,而不是通过

c++ - 什么变化导致 C++ 中的 ABI 中断?

当C++标准化委员会调查STL的修改时,非常注意不要引入ABI破坏性更改。是什么导致了ABI中断,什么没有在C++中引入ABI中断?((欢迎链接到专注于此的类(class)或文档) 最佳答案 虽然没有通用的ABI,但标准委员会确实听取了供应商对一些供应商报告的ABI损坏提出的担忧。这些担忧是否会阻止做出改变取决于改变的内容。对于标准库,导致潜在ABI破坏的主要问题是那些改变类或类模板的布局或改变典型内联函数的行为的问题。大多数情况下,问题可以通过稍微不同的表述或稍微移动功能来解决。对于C++11,我记得关于ABI的相关讨论std::

windows - Visual Studio 参数对齐限制和 Windows x64 ABI

对于WIN32上的VisualC++,具有4个或更多SSE参数的函数存在一个长期存在的问题,例如__m128ifoo4(__m128im0,__m128im1,__m128im2,__m128im3){}产生一个错误:align.c(8):errorC2719:'m3':formalparameterwith__declspec(align('16'))won'tbealigned使问题更加复杂的是,即使函数是__inline,VisualC++仍然不必要地施加了ABI限制。我想知道这是否仍然是64位Windows上的问题?ABI限制是否仍然适用于x64?(我无法访问64位Window