【问题标题】:Android load library error -- failed to map segmentAndroid 加载库错误 -- 无法映射段
【发布时间】:2011-06-09 10:01:01
【问题描述】:

我正在使用 JNI 加载本机库。库位于 sdcard 上。

我正在使用此代码加载库:

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);
        }

但我总是得到:

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 上得到了这个

非常感谢任何想法如何解决这个问题!!!

谢谢, 卡洛斯

【问题讨论】:

    标签: android java-native-interface android-ndk


    【解决方案1】:

    您无法加载本机库或执行位于 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 
    

    【讨论】:

    • 可以用Java复制文件,也可以用本机代码复制,没关系。只需将文件复制到内部存储中即可。
    【解决方案2】:

    在您的应用程序中添加您的 .so 文件并使用以下内容..

    System.loadLibrary("libIMPInterface.so");
    

    【讨论】:

    • 你的意思是作为apk的一部分吗?
    • 我认为你不能使用“libIMPInterface.so”。相反,您将使用“IMPInterface”。但您也可以像 OP 一样使用 System.load("fullname")。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 2012-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多