QLa*_*nds 2 java-native-interface android android-ndk
我正在使用JNI加载本机库.该库驻留在SD卡上.
我正在使用以下代码加载库:
try
{
File str;
String storage;
str = Environment.getExternalStorageDirectory();
storage = str.getAbsolutePath();
File f = new File(storage+"/Android/data/org.ilri.IMPACTLight/libIMPInterface.so");
if (f.exists())
System.load(storage+"/Android/data/org.ilri.IMPACTLight/libIMPInterface.so");
}
catch (SecurityException e)
{
Log.i(QtTAG, "Security: Can't load /mnt/sdcard/Android/data/org.ilri.IMPACTLight/libIMPInterface.so", e);
}
catch (UnsatisfiedLinkError e)
{
Log.i(QtTAG, "Link: Can't load /mnt/sdcard/Android/data/org.ilri.IMPACTLight/libIMPInterface.so", e);
}
Run Code Online (Sandbox Code Playgroud)
但是我总是得到:
D/dalvikvm(408):试图加载lib /mnt/sdcard/Android/data/org.ilri.GPSTest/libGPSInterface.so 0x44ede2c0 I/dalvikvm(408):无法dlopen(/ mnt/sdcard/Android/data/org.ilri.GPSTest/libGPSInterface.so):无法加载库:load_segments [907]:33无法映射来自'libGPSInterface.so'@ 0x81900000(0x00003470)的段.p_vaddr = 0x00000000 p_offset = 0x00000000
我在AVD 2.2上得到了这个
任何想法如何解决这一点非常感谢!!!
谢谢,卡洛斯
您无法加载本机库或执行位于SDCard上的二进制文件.它是挂载noexec.
在加载库之前,您需要将库复制到内部存储,也就是说,在子目录中dataDir,例如:
PackageManager pm = context.getPackageManager();
String dataDir = pm.getApplicationInfo(context.getPackageName(), 0).dataDir;
// Create a directory like dataDir/mylibs/ and copy the library in it
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4967 次 |
| 最近记录: |