cod*_*ons 11 android arm android-ndk eabi
我正在开发一个Android项目,我正在使用NDK来调用本机方法.我有两个库(.so文件),一个位于libs/armeabi文件夹中,另一个位于libs/armeabi-v7alib文件夹中.
如果我尝试运行该应用程序,那么它将不会加载该/libs/armeabi文件夹中的库.如果我将库文件移动到该libs/armeabi-v7a文件夹,则它会加载库,但在5到10分钟后它会崩溃并出现分段错误错误.
我想知道库(不同文件夹)的位置是否可能导致此问题.
lov*_*bug 20
安装应用程序时,包管理器服务将扫描.apk并查找表单的任何共享库:
lib/<primary-abi>/lib<name>.so
Run Code Online (Sandbox Code Playgroud)
如果找到一个,则将其复制到$ APPDIR/lib/lib.so下,其中$ APPDIR对应于应用程序的特定数据目录.
如果未找到,并且定义了辅助ABI,则服务将扫描该表单的共享库:
lib/<secondary-abi>/lib<name>.so
Run Code Online (Sandbox Code Playgroud)
如果找到任何内容,则将其复制到$ APPDIR/lib/lib.so下.
对于主要/次要abi,
Android系统在运行时知道它支持哪些ABI.更准确地说,最多使用两个特定于构建的系统属性来指示:
设备的"主要"ABI,对应于系统映像本身使用的机器代码.
可选的"辅助"ABI,对应于系统映像也支持的另一个ABI.
例如,典型的基于ARMv5TE的设备仅将主要ABI定义为"armeabi"而不定义次要ABI.
另一方面,典型的基于ARMv7的设备将主要ABI定义为"armeabi-v7a",将次要ABI定义为"armeabi",因为它可以运行为它们生成的应用程序本机二进制文件.
此机制可确保在安装时自动从程序包中提取目标设备的最佳机器代码.
库加载器将尝试查找与您正在运行的体系结构最匹配的库.通常,您应该为您计划支持的每个abis(armeabi,armeabi-v7a,x86,mips)编译一个版本的库,以便编译器可以正确地进行优化.
目录结构是Android如何确定要加载的lib,因此关键是不要更改它.
Dab*_*ler -6
我自己对此很陌生,但是走同样的路......据我所知,一个人可能只有一个共享库;要使用多个库,请将它们设为静态并将它们链接到一个共享库。当然,这假设您自己构建库;-)
| 归档时间: |
|
| 查看次数: |
22134 次 |
| 最近记录: |