Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android JNI:调用System.loadLibrary()会导致SEGV_Android_Java Native Interface - Fatal编程技术网

Android JNI:调用System.loadLibrary()会导致SEGV

Android JNI:调用System.loadLibrary()会导致SEGV,android,java-native-interface,Android,Java Native Interface,可能重复: 我正在重新使用来自另一个应用程序的现有NDK编译库 当我尝试使用System.loadLibrary()加载库时,它与SIGSEGV一起崩溃 简单地说,我正在这样做: static { System.loadLibrary("testlib"); } 我相信该库是好的,因为它正在另一个应用程序中使用(无需修改)。 我也可以以这种方式加载其他库,而不会出现任何问题 我对使用Android/NDK非常陌生——是否有一些我需要小心指定或设置的东西可能我遗

可能重复:

我正在重新使用来自另一个应用程序的现有NDK编译库

当我尝试使用System.loadLibrary()加载库时,它与SIGSEGV一起崩溃

简单地说,我正在这样做:

  static {
        System.loadLibrary("testlib");
      }
我相信该库是好的,因为它正在另一个应用程序中使用(无需修改)。 我也可以以这种方式加载其他库,而不会出现任何问题

我对使用Android/NDK非常陌生——是否有一些我需要小心指定或设置的东西可能我遗漏了

以下是我在日志中看到的内容:

04-17 09:33:37.725  6100  6100 D dalvikvm: Trying to load lib /data/data/com.test.android/lib/libtestlib.so 0x4051617
0
04-17 09:33:37.733  6100  6100 D dalvikvm: Added shared lib /data/data/com.test.android/lib/libtestlib.so 0x40516170
04-17 09:33:37.733  6108  6108 I DEBUG   : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
04-17 09:33:37.733  6108  6108 I DEBUG   : Build fingerprint: 'verizon/venus2_vzw/cdma_venus2:2.3.4/4.5.1-110-VNS-35/120113:user/release-keys'
04-17 09:33:37.733  6108  6108 I DEBUG   : pid: 6100, tid: 6100  >>> com.test.android <<<
04-17 09:33:37.733  6108  6108 I DEBUG   : signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000018
04-17 09:33:37.733  6108  6108 I DEBUG   :  r0 00000005  r1 aca83d13  r2 000415a6  r3 81db5c4c
04-17 09:33:37.733  6108  6108 I DEBUG   :  r4 00000000  r5 00000000  r6 81db5c4c  r7 81db5c40
04-17 09:33:37.733  6108  6108 I DEBUG   :  r8 0000cec8  r9 81c8734d  10 002b1284  fp 00000000
04-17 09:33:37.733  6108  6108 I DEBUG   :  ip fffffe8c  sp bef91e48  lr aca6661b  pc aca45c0e  cpsr 20000070
04-17 09:33:37.733  6108  6108 I DEBUG   :  d0  643a64696f72646e  d1  6472656767756265
04-17 09:33:37.733  6108  6108 I DEBUG   :  d2  81dbd63081dc20c8  d3  81dc30a081c84481
04-17 09:33:37.733  6108  6108 I DEBUG   :  d4  81c844b981db6ccc  d5  81dc20b481dc209c
04-17 09:33:37.733  6108  6108 I DEBUG   :  d6  81dc20cc81c844ad  d7  81c844a181dbb618
04-17 09:33:37.733  6108  6108 I DEBUG   :  d8  0000000000000000  d9  0000000000000000
04-17 09:33:37.733  6108  6108 I DEBUG   :  d10 0000000000000000  d11 0000000000000000
04-17 09:33:37.733  6108  6108 I DEBUG   :  d12 0000000000000000  d13 0000000000000000
04-17 09:33:37.733  6108  6108 I DEBUG   :  d14 0000000000000000  d15 0000000000000000
04-17 09:33:37.733  6108  6108 I DEBUG   :  d16 bef91b68405515a8  d17 0000000000000000
04-17 09:33:37.733  6108  6108 I DEBUG   :  d18 0707070703030303  d19 0000000000000000
04-17 09:33:37.733  6108  6108 I DEBUG   :  d20 0100010001000100  d21 0100010001000100
04-17 09:33:37.733  6108  6108 I DEBUG   :  d22 0000000000000000  d23 0000000000000000
04-17 09:33:37.733  6108  6108 I DEBUG   :  d24 0000000000000000  d25 0000000000000000
04-17 09:33:37.733  6108  6108 I DEBUG   :  d26 0100010001000100  d27 0100010001000100
04-17 09:33:37.733  6108  6108 I DEBUG   :  d28 0100010001000100  d29 0100010001000100
04-17 09:33:37.733  6108  6108 I DEBUG   :  d30 00c7000000c10000  d31 00d3000000cd0000
04-17 09:33:37.733  6108  6108 I DEBUG   :  scr 20000012
04-17 09:33:37.725 6100 6100 D dalvikvm:正在尝试加载lib/data/data/com.test.android/lib/libtestlib.so 0x4051617
0
04-17 09:33:37.733 6100 6100 D dalvikvm:添加了共享lib/data/data/com.test.android/lib/libtestlib.so 0x40516170
04-17 09:33:37.733 6108 6108我调试:************************************************************************
04-17 09:33:37.733 6108 6108 I调试:构建指纹:“verizon/venus2_vzw/cdma_venus2:2.3.4/4.5.1-110-VNS-35/120113:用户/释放密钥”
04-17 09:33:37.733 6108 6108 I调试:pid:6100,tid:6100>>>com.test.android
因此,请使用System.load()。

找到答案。
我的线索是,如果我通过eclipse运行它,它会运行良好,并且只有在创建.apk文件时才会出现这个问题


我在这里找到了解决方案:

谢谢你的建议,但是找到库没有任何问题。它在加载库时与SEGV崩溃。在上面的描述中添加了更多内容以显示其查找和加载库。使用实现的本机方法类及其运行正常的应用程序的包名。我认为本机方法无法与本机库链接。进一步。发现问题发生在本机代码的JNI_OnLoad()中。它正在尝试执行env->FindClass(“com/test/android/aclass”)。它没有找到类,得到NULL,然后尝试遵从NULL指针。好的,这就解释了SEGV。但是为什么我不能在JNI_OnLoad中找到类呢?它正在引发NoClassDefFoundError异常。有什么想法吗?JNION Load()用于JNI登记C++编译器的本地方法。首先看一下在JNI_OnLoad()中注册的所有本机方法,它们应该是相同的函数名,在java类文件中具有正确的参数和正确的返回类型。如果本机声明为env->FindClass(“com/test/android/aclass”),这意味着您必须在com/test/android下声明aclass.java中的所有本机方法,否则jni无法链接到java类。
System.loadLibrary() loads library from current project and System.load(fullPathLibName) load library from specific path.