【问题标题】:How to link Android NDK shared library?如何链接 Android NDK 共享库?
【发布时间】:2015-09-11 20:24:35
【问题描述】:

我可以建立一个生产所有平台的共享库。我有一个 makefile 名称 Android.mk 为:

 LOCAL_PATH := $(call my-dir)
 include $(CLEAR_VARS)
 LOCAL_SRC_FILES := com_masum_test_JniTest.c
 LOCAL_MODULE := com_masum_test_JniTest
 include $(BUILD_SHARED_LIBRARY) 

另一个名为 Application.mk 的文件为:

APP_ABI := all

当我输入命令 ndk-build 时,它会创建所有共享库。

但是当我调用本机函数时,我得到异常:-

09-11 15:57:02.018 22949-22949/com.masum.test E/AndroidRuntime:致命异常:主要 进程:com.masum.test,PID:22949 java.lang.IllegalStateException:无法执行活动的方法

原因:java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.masum.test-1/base.apk"],nativeLibraryDirectories=[/data/app /com.masum.test-1/lib/x86, /vendor/lib, /system/lib]]] 找不到“libcom_masum_test_JniTest.so”

我什至在我的工作空间中都没有看到 lib 文件夹。检查图片:-

文件浏览器:-

显然我的应用程序无法与共享库链接。那么如何链接呢?

【问题讨论】:

    标签: java android c++ android-ndk linker


    【解决方案1】:

    我找到了一种链接方式。如果我在 app/src/main 中创建一个名为 jniLibs 的目录,然后将所有共享库复制到其中。它能够链接和加载库。注意目录名“jniLibs”区分大小写。

    你必须在源代码中调用它:-

    static{
        System.loadLibrary("libray_name"); // without prefix 'lib' and suffix '.so' i.e. "libLibName.so" should be only LibName. 
    }
    

    【讨论】:

      猜你喜欢
      • 2015-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-20
      相关资源
      最近更新 更多