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

时间:2012-04-17 03:18:21

标签: android java-native-interface

  

可能重复:
  Application works in debug / run from Eclipse, but .APK gives .classNotFoundException when parsing XML layout that contains a custom View

我正在重复使用来自其他应用程序的现有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

如果我在模拟器上运行它,它可以正常工作。

2 个答案:

答案 0 :(得分:1)

System.loadLibrary() loads library from current project and System.load(fullPathLibName) load library from specific path.

因此,请使用System.load()。

答案 1 :(得分:0)

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

我在这里找到了解决方案:Application works in debug / run from Eclipse, but .APK gives .classNotFoundException when parsing XML layout that contains a custom View