大佬教程收集整理的这篇文章主要介绍了需要帮助调试共享库无法加载的原因. Android NDK,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
writev(3,[{"\3",1},{"dalvikvm\0",9},{"Trying to load lib /data/data/com.exa mple.Hellojni/lib/libsharedC.so 0x44e8ce28\n\0",83}],3) = 93 stat64("/data/data/com.example.Hellojni/lib/libsharedC.so",{st_dev=makedev(31,1),st_ino=499,st_mode=S_IFREG|0644,st_nlink=1,st_uid=1000,st_gid=1000,st _blksize=4096,sT_Blocks=24487,st_size=12536908,st_atime=2012/03/22-21:49:35,st_mtime=2012/03/22-14:48:00,st_ctime=2012/03/22-21:49:41}) = 0 open("/data/data/com.example.Hellojni/lib/libsharedC.so",O_RDONLY|O_LARGEFILE ) = 27 lseek(27,SEEK_SET) = 0 read(27,"\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0°\235\31\0004\0\0\0\4I┐\ 0\2\0\0\0054\0 \0\5\0(\0\25\0\24\0\1\0\0pΦ\224║\0Φ\224║\0Φ\224║\0@X\2\0@X\2\0\4\ 0\0\0\4\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0(φ╝\0(φ╝\0\5\0\0\0\0\20\0\0\1\0\0\0 (φ╝\0(²╝\0(²╝\0\234G\2\0\20\202\2\0\6\0\0\0\0\20\0\0\2\0\0\0°»╛\0°┐╛\0°┐╛\0\10\1 \0\0\10\1\0\0\6\0\0\0\4\0\0\0Qσtd\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\0\0\ 0\4\0\0\0\33@\0\0fJ\0\0\0\0\0\0┴G\0\0$,\0\0\222\27\0\0#\2\0\0j)\0\0\1&\0\0\0045\ 0\0\16.\0\0"...,4096) = 4096 lseek(27,-8,SEEK_END) = 12536900 read(27,"\1\0\0\0\0\0\0\0",8) = 8 mmap2(0x82000000,12550144,PROT_READ|PROT_EXEC,MAP_PRIVATE|MAP_ANONymOUS,-1,0) = 0x82000000 mmap2(0x82000000,12381480,MAP_PRIVATE|MAP_FIXED,27,0) = 0x82000000 mprotect(0x82000000,12382208,PROT_READ|PROT_WRITE|PROT_EXEC) = 0 mmap2(0x82bcf000,152772,PROT_READ|PROT_WRITE,0xbce ) = 0x82bcf000 mmap2(0x82bf5000,12088,MAP_PRIVATE|MAP_FIXED|MAP_ANONymO US,0) = 0x82bf5000 close(27) = 0 mprotect(0x82000000,PROT_READ|PROT_EXEC) = 0 getuid32() = 10030 geteuid32() = 10030 getgid32() = 10030 getegid32() = 10030 mprotect(0x41868000,4096,PROT_READ|PROT_WRITE) = 0 mprotect(0x41868000,PROT_READ) = 0 mprotect(0x41868000,PROT_READ) = 0 recv(-2136444848,ptrace: umoven: I/O error 0x1,2147483647,0) = 0 mprotect(0x41868000,PROT_READ) = 0 ... mprotect(0x42f02000,PROT_READ|PROT_WRITE) = 0 mprotect(0x42f02000,PROT_READ) = 0 getcwd(0,0) = -1 ERANGE (Math result not representab lE) brk(0x37f000) = 0x37f000 lstat64(".",{st_dev=makedev(0,st_ino=1,st_mode=S_IFDIR|0755,st_nlink=13,st_uid=0,st_gid=0,sT_Blksize=4096,sT_Blocks=0,st_size=0,st_atime=0,st_mti me=2012/03/22-21:46:13,st_ctime=2012/03/22-21:46:13}) = 0 lstat64("/",st_ctime=2012/03/22-21:46:13}) = 0 getuid32() = 10030 --- SIGSEGV (Segmentation fault) @ 0 (0) --- sigaction(SIGUSR1,{SIG_IGN},{SIG_DFL},0) = 0 SYS_224(0,0xbea811a0,0) = 224 socket(PF_UNIX,SOCK_STREAM,0) = 27 connect(27,{sa_family=AF_UNIX,path=@android:debuggerD},20) = 0 write(27,"α\0\0\0",4) = 4 read(27,0xbea811cc,1) = ? ERESTARTSYS (To be restarted) read(27,"",1) = 0 close(27) = 0 sigaction(SIGSEGV,{0xb0001d45,[],SA_RESTART},0) = 0 sigreturn() = ? (mask Now [HUP QUIT TRAP ABRT BUS]) --- SIGSEGV (Segmentation fault) @ 0 (0) --- Process 224 detached
什么出错了?
update 1
好的,调试堆栈跟踪对我来说是新的,但请继续跟进
告诉我,如果我做错了或其他?
有趣的是,似乎我是SEGV正在我身边发生
码??看起来它发生在libgnustl_shared.so中.
所以这是我的堆栈跟踪:
03-23 23:37:14.213: I/DEBUG(28): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 03-23 23:37:14.213: I/DEBUG(28): Build fingerprint: 'generic/sdk/ generic/:2.1-update1/ECLAIR/35983:eng/test-keys' 03-23 23:37:14.224: I/DEBUG(28): pid: 332,tid: 332 >>> com.example.Hellojni <<< 03-23 23:37:14.224: I/DEBUG(28): signal 11 (SIGSEGV),fault addr 00000000 03-23 23:37:14.224: I/DEBUG(28): r0 00000000 r1 00000000 r2 80808080 r3 00000000 03-23 23:37:14.224: I/DEBUG(28): r4 00000000 r5 bea8154c r6 bea81600 r7 00000000 03-23 23:37:14.224: I/DEBUG(28): r8 bea81820 r9 41971894 10 00000354 fp bea814fc 03-23 23:37:14.224: I/DEBUG(28): ip 80a81058 sp bea814c0 lr 80a63cd8 pc afe0e7c8 cpsr 40000010 03-23 23:37:14.313: I/DEBUG(28): #00 pc 0000e7c8 /system/ lib/libc.so 03-23 23:37:14.313: I/DEBUG(28): #01 pc 00063cd4 /data/data/ com.example.Hellojni/lib/libgnustl_shared.so 03-23 23:37:14.323: I/DEBUG(28): code around pc: 03-23 23:37:14.323: I/DEBUG(28): afe0e7b8 e31c0003 1afffff6 e1a00002 e59f20d8 03-23 23:37:14.323: I/DEBUG(28): afe0e7c8 e490c004 e0433000 f5d0f040 e04c13a2 03-23 23:37:14.323: I/DEBUG(28): afe0e7d8 e0011002 e1d1100c 0490c004 1a000022 03-23 23:37:14.323: I/DEBUG(28): code around lr: 03-23 23:37:14.323: I/DEBUG(28): 80a63cc8 e1a05000 e1a00001 e1a04001 ebff27d0 03-23 23:37:14.323: I/DEBUG(28): 80a63cd8 e1a01004 e1a02000 e1a00005 e8bd4070 03-23 23:37:14.323: I/DEBUG(28): 80a63ce8 eaffffa0 e590c000 e92d45f0 e51ce00c 03-23 23:37:14.323: I/DEBUG(28): stack: 03-23 23:37:14.323: I/DEBUG(28): bea81480 001479d0 [heap] 03-23 23:37:14.323: I/DEBUG(28): bea81484 bea81820 [stack] 03-23 23:37:14.323: I/DEBUG(28): bea81488 41971894 /dev/ashmem/ dalvik-LinearAlloc (deleted) 03-23 23:37:14.323: I/DEBUG(28): bea8148c 00000354 03-23 23:37:14.334: I/DEBUG(28): bea81490 bea814fc [stack] 03-23 23:37:14.334: I/DEBUG(28): bea81494 00147a24 [heap] 03-23 23:37:14.334: I/DEBUG(28): bea81498 00000006 03-23 23:37:14.334: I/DEBUG(28): bea8149c 80a63b58 /data/data/ com.example.Hellojni/lib/libgnustl_shared.so 03-23 23:37:14.334: I/DEBUG(28): bea814a0 00000006 03-23 23:37:14.334: I/DEBUG(28): bea814a4 bea81548 [stack] 03-23 23:37:14.334: I/DEBUG(28): bea814a8 80a82110 03-23 23:37:14.334: I/DEBUG(28): bea814ac 00000000 03-23 23:37:14.334: I/DEBUG(28): bea814b0 bea81820 [stack] 03-23 23:37:14.334: I/DEBUG(28): bea814b4 80a63bcc /data/data/ com.example.Hellojni/lib/libgnustl_shared.so 03-23 23:37:14.334: I/DEBUG(28): bea814b8 df002777 03-23 23:37:14.334: I/DEBUG(28): bea814bc e3a070ad 03-23 23:37:14.344: I/DEBUG(28): #00 bea814c0 bea814d4 [stack] 03-23 23:37:14.344: I/DEBUG(28): bea814c4 00000000 03-23 23:37:14.344: I/DEBUG(28): #01 bea814c8 bea81548 [stack] 03-23 23:37:14.344: I/DEBUG(28): bea814cc bea81548 [stack] 03-23 23:37:14.344: I/DEBUG(28): bea814d0 bea81600 [stack] 03-23 23:37:14.344: I/DEBUG(28): bea814d4 8131f228 /data/data/ com.example.Hellojni/lib/libsharedB.so 03-23 23:37:14.344: I/DEBUG(28): bea814d8 afe39190 /system/lib/ libc.so 03-23 23:37:14.344: I/DEBUG(28): bea814dc bea8152c [stack] 03-23 23:37:14.344: I/DEBUG(28): bea814e0 001479a0 [heap] 03-23 23:37:14.344: I/DEBUG(28): bea814e4 bea81548 [stack] 03-23 23:37:14.344: I/DEBUG(28): bea814e8 80a8211c 03-23 23:37:14.344: I/DEBUG(28): bea814ec 001479a0 [heap] 03-23 23:37:14.344: I/DEBUG(28): bea814f0 bea81548 [stack] 03-23 23:37:14.344: I/DEBUG(28): bea814f4 bea81548 [stack] 03-23 23:37:14.344: I/DEBUG(28): bea814f8 bea8151c [stack] 03-23 23:37:14.344: I/DEBUG(28): bea814fc 8131eb8c /data/data/ com.example.Hellojni/lib/libsharedB.so 03-23 23:37:14.344: I/DEBUG(28): bea81500 bea8152c [stack] 03-23 23:37:14.344: I/DEBUG(28): bea81504 0000272e 03-23 23:37:14.344: I/DEBUG(28): bea81508 80a82124 03-23 23:37:14.344: I/DEBUG(28): bea8150c 80a8211c 03-23 23:37:14.884: D/Zygote(30): Process 332 terminated by signal (11) 03-23 23:37:14.893: I/Activitymanager(52): Process com.example.Hellojni (pid 332) has died. 03-23 23:37:14.966: I/UsageStats(52): Unexpected resume of com.android.launcher while already resumed in com.example.Hellojni
基于阅读android-ndk-r7b /我试过这个更好地理解它
文档/ NDK-STACK.html
adb.exe logcat | C:\ndk\android-ndk-r7b\ndk-stack.exe -sym C:\ndk \android-ndk-r7_google\samples\Hello-jni\obj\local\armeabi ********** Crash dump: ********** Build fingerprint: 'generic/sdk/generic/:2.1-update1/ECLAIR/35983:eng/ test-keys' pid: 332,tid: 332 >>> com.example.Hellojni <<< signal 11 (SIGSEGV),fault addr 00000000 Stack frame #00 pc 0000e7c8 /system/lib/libc.so Stack frame #01 pc 00063cd4 /data/data/com.example.Hellojni/lib/ libgnustl_shared.so: Unable to locate routIne information for address 63cd4 in module C:\ndk\android-ndk-r7_google\samples\Hello-jni\obj \local\armeabi/libgnustl_shared.so
所以,我不知道现在该做什么.我没有创造
libgnustl_shared.so,它只是ndk的一部分.@R_696_10992@,
我加载了一些其他共享库.加载时发生这种情况
最后一个依赖于其他共享库的库
在我首先加载的libgnustl_shared.so上.
还需要哪些其他信息来正确调试此问题?
update 2
为了更好地描述我的项目,我有6个共享库
加载.
第一个是libgnustl_shared.so,它加载正常.
接下来是libpcre.so.这是一个预建的共享库.它加载
精细.这是它的readelf:
File: libpcre.so Dynamic section at offset 0x16d8c contains 23 entries: Tag Type Name/Value 0x00000001 (NEEDED) Shared library: [libc.so] 0x00000001 (NEEDED) Shared library: [libdl.so] 0x0000000e (SOName) Library soname: [libpcre.so] 0x00000010 (SymBOLIC) 0x0 0x00000019 (INIT_ARRAY) 0x17d78 0x0000001b (INIT_ARRAYSz) 8 (bytes) 0x0000001a (FINI_ARRAY) 0x17d80 0x0000001c (FINI_ARRAYSz) 12 (bytes) 0x00000004 (HASH) 0xb4 0x00000005 (STRTAB) 0x858 0x00000006 (SymTAB) 0x318 0x0000000a (STRSz) 1095 (bytes) 0x0000000b (SymENT) 16 (bytes) 0x00000003 (pltGOT) 0x17e64 0x00000002 (pltRELSz) 192 (bytes) 0x00000014 (pltREL) REL 0x00000017 (JMPREL) 0xcf8 0x00000011 (REL) 0xca0 0x00000012 (RELSz) 88 (bytes) 0x00000013 (RELENT) 8 (bytes) 0x00000016 (TEXTREL) 0x0 0x6ffffffa (RELCOUNT) 7 0x00000000 (NULL) 0x0
接下来是libsharedA.so.这是一个预建的共享库.它加载
精细.这是它的readelf:
File: libsharedA.so Dynamic section at offset 0xd536c contains 25 entries: Tag Type Name/Value 0x00000001 (NEEDED) Shared library: [libgnustl_shared.so] 0x00000001 (NEEDED) Shared library: [libm.so] 0x00000001 (NEEDED) Shared library: [libc.so] 0x00000001 (NEEDED) Shared library: [libdl.so] 0x0000000e (SOName) Library soname: [libsharedA.so] 0x00000010 (SymBOLIC) 0x0 0x00000019 (INIT_ARRAY) 0xd6054 0x0000001b (INIT_ARRAYSz) 16 (bytes) 0x0000001a (FINI_ARRAY) 0xd6064 0x0000001c (FINI_ARRAYSz) 16 (bytes) 0x00000004 (HASH) 0xd4 0x00000005 (STRTAB) 0x50cc 0x00000006 (SymTAB) 0x175c 0x0000000a (STRSz) 8630 (bytes) 0x0000000b (SymENT) 16 (bytes) 0x00000003 (pltGOT) 0xd6454 0x00000002 (pltRELSz) 1832 (bytes) 0x00000014 (pltREL) REL 0x00000017 (JMPREL) 0x7ca4 0x00000011 (REL) 0x7284 0x00000012 (RELSz) 2592 (bytes) 0x00000013 (RELENT) 8 (bytes) 0x00000016 (TEXTREL) 0x0 0x6ffffffa (RELCOUNT) 219 0x00000000 (NULL) 0x0
接下来是libsharedB.so.这是一个预建的共享库.它加载
精细.这是它的readelf:
File: libsharedB.so Dynamic section at offset 0xea6278 contains 28 entries: Tag Type Name/Value 0x00000001 (NEEDED) Shared library: [libsharedA.so] 0x00000001 (NEEDED) Shared library: [libpcre.so] 0x00000001 (NEEDED) Shared library: [libgnustl_shared.so] 0x00000001 (NEEDED) Shared library: [libm.so] 0x00000001 (NEEDED) Shared library: [libc.so] 0x00000001 (NEEDED) Shared library: [libdl.so] 0x0000000e (SOName) Library soname: [libsharedB.so] 0x00000010 (SymBOLIC) 0x0 0x0000000f (RPATH) Library rpath: [/home/corbin/ sharedA/.libs:/home/corbin/pcreout/lib] 0x00000019 (INIT_ARRAY) 0xe9a000 0x0000001b (INIT_ARRAYSz) 2032 (bytes) 0x0000001a (FINI_ARRAY) 0xe9a7f0 0x0000001c (FINI_ARRAYSz) 12 (bytes) 0x00000004 (HASH) 0xd4 0x00000005 (STRTAB) 0xaf734 0x00000006 (SymTAB) 0x2ff44 0x0000000a (STRSz) 1534855 (bytes) 0x0000000b (SymENT) 16 (bytes) 0x00000003 (pltGOT) 0xea6378 0x00000002 (pltRELSz) 4216 (bytes) 0x00000014 (pltREL) REL 0x00000017 (JMPREL) 0x2964e4 0x00000011 (REL) 0x2262bc 0x00000012 (RELSz) 459304 (bytes) 0x00000013 (RELENT) 8 (bytes) 0x00000016 (TEXTREL) 0x0 0x6ffffffa (RELCOUNT) 9922 0x00000000 (NULL) 0x0
接下来是libsharedC.so.这是一个预建的共享库.它失败
用前面描述的SEGV加载.这是readelf来自
它:
File: libsharedC.so Dynamic section at offset 0xed7934 contains 29 entries: Tag Type Name/Value 0x00000001 (NEEDED) Shared library: [libsharedB.so] 0x00000001 (NEEDED) Shared library: [libsharedA.so] 0x00000001 (NEEDED) Shared library: [libz.so] 0x00000001 (NEEDED) Shared library: [libgnustl_shared.so] 0x00000001 (NEEDED) Shared library: [libm.so] 0x00000001 (NEEDED) Shared library: [libc.so] 0x00000001 (NEEDED) Shared library: [libdl.so] 0x0000000e (SOName) Library soname: [libsharedC.so] 0x00000010 (SymBOLIC) 0x0 0x0000000f (RPATH) Library rpath: [/home/corbin/ libsharedB/.libs:/home/corbin/libsharedA/.libs] 0x00000019 (INIT_ARRAY) 0xeb6000 0x0000001b (INIT_ARRAYSz) 1068 (bytes) 0x0000001a (FINI_ARRAY) 0xeb642c 0x0000001c (FINI_ARRAYSz) 12 (bytes) 0x00000004 (HASH) 0xd4 0x00000005 (STRTAB) 0xab79c 0x00000006 (SymTAB) 0x2f28c 0x0000000a (STRSz) 1557316 (bytes) 0x0000000b (SymENT) 16 (bytes) 0x00000003 (pltGOT) 0xed7a3c 0x00000002 (pltRELSz) 45320 (bytes) 0x00000014 (pltREL) REL 0x00000017 (JMPREL) 0x296258 0x00000011 (REL) 0x227ae0 0x00000012 (RELSz) 452472 (bytes) 0x00000013 (RELENT) 8 (bytes) 0x00000016 (TEXTREL) 0x0 0x6ffffffa (RELCOUNT) 31042 0x00000000 (NULL) 0x0
我没有加载第6个共享库,但那就是那个
我在顶部创建,依赖于这些预建共享
库.
当我尝试David’s suggestion时:
03-27 20:13:18.483: I/utils(255): trying dlopen of </data/data/com.example.Hellojni/lib/libpcre.so> 03-27 20:13:18.483: I/utils(255): handle=0xb0012c08 error: Symbol not found: 03-27 20:13:18.483: I/utils(255): trying dlopen of </data/data/com.example.Hellojni/lib/libsharedA.so> 03-27 20:13:18.503: I/utils(255): handle=0xb0012d20 error: (null) 03-27 20:13:18.515: I/utils(255): trying dlopen of </data/data/com.example.Hellojni/lib/libsharedB.so> 03-27 20:13:19.053: I/utils(255): handle=0xb0012e38 error: (null) 03-27 20:13:19.053: I/utils(255): trying dlopen of </data/data/com.example.Hellojni/lib/libsharedC.so> 03-27 20:13:19.753: I/DEBUG(28): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 03-27 20:13:19.763: I/DEBUG(28): Build fingerprint: 'generic/sdk/generic/:2.1-update1/ECLAIR/35983:eng/test-keys' 03-27 20:13:19.773: I/DEBUG(28): pid: 255,tid: 255 >>> com.example.Hellojni <<< 03-27 20:13:19.773: I/DEBUG(28): signal 11 (SIGSEGV),fault addr 00000000 03-27 20:13:19.773: I/DEBUG(28): r0 00000000 r1 00000000 r2 80808080 r3 00000000 03-27 20:13:19.773: I/DEBUG(28): r4 00000000 r5 be890574 r6 be890628 r7 00000000 03-27 20:13:19.773: I/DEBUG(28): r8 80b03a18 r9 be890768 10 4186bc28 fp be890524 03-27 20:13:19.773: I/DEBUG(28): ip 80a81058 sp be8904e8 lr 80a63cd8 pc afe0e7c8 cpsr 40000010 03-27 20:13:19.863: I/DEBUG(28): #00 pc 0000e7c8 /system/lib/libc.so 03-27 20:13:19.863: I/DEBUG(28): #01 pc 00063cd4 /data/data/com.example.Hellojni/lib/libgnustl_shared.so
我看到一个有趣的libpcre,但它是依赖于它的libsharedB,他最终装得很好.但是,我没有得到任何更多的信息,它实际上是通过libsharedC上的SEGV崩溃的.
请告诉我调试需要哪些其他信息.我卡住了,但是
这对我很重要,可以提供所需的任何信息
更好地理解失败.
我也转而使用我的库的静态版本并到达完全相同的位置.
如果我使用基于静态跟踪的addr2line,我得到以下内容:
android-linux-addr2line.exe -C -f -e libc.so 0000e7c8 strlen ??:0 android-linux-addr2line.exe -C -f -e libgnustl_shared.so 00063cd4 std::string::operator=(char const*) ??:0
#include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <String.h> #include <jni.h> #include <dlfcn.h> #include <android/log.h> #define LOG_TAG "utils" #define LOGI(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__) #define LOGW(...) __android_log_print(ANDROID_LOG_WARN,__VA_ARGS__) #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,__VA_ARGS__) #define LOGD(...) __android_log_print(ANDROID_LOG_INFO,__VA_ARGS__) static void dlopen_impl(jnienv* jenv,jclass clazz,jString path) { int pathlen = jenv->GetStringUTFLength(path); char pathb[pathlen + 1]; jenv->GetStringUTFRegion(path,pathlen,pathb); LOGD("trying dlopen of <%s>",pathb); void* handle = dlopen(pathb,RTLD_Now); LOGD("handle=%p error: %s",handle,dlerror()); } static int registerNativeMethods(jnienv* env,const char* className,const JNINativeMethod* gMethods,int numMethods) { jclass clazz; clazz = env->FindClass(className); if (clazz == NULL) return -1; int result = 0; if (env->RegisterNatives(clazz,gMethods,numMethods) < 0) result = -1; env->deleteLocalRef(clazz); return result; } extern "C" jint JNI_OnLoad(JavaVM* vm,void *); __attribute__((visibility("default"))) jint JNI_OnLoad(JavaVM* vm,void *) { jnienv* jenv; vm->GetEnv((void**) &jenv,JNI_VERSION_1_4); static const JNINativeMethod m[] = { { "dlopentest","(Ljava/lang/String;)V",(void*) &dlopen_impl },}; registerNativeMethods(jenv,"com/cowlark/android/Utils",m,sizeof(m)/sizeof(*m)); return JNI_VERSION_1_4; }
然后我创建一个java类com.cowlark.android.Utils,如下所示:
package com.antixlabs.agpndk; import java.io.File; public class Utils { static { System.loadLibrary("agputils"); } public native static void dlopentest(String path); }
现在这一切都完成了,我可以将以下代码插入到我的实际应用程序类中:
static { Utils.dlopentest("/data/data/com.cowlark.myapp/lib/libdodgy.so"); }
如果libdodgy.so无法加载,我实际上得到一个实际上提供信息的错误消息.
这个伎俩过去给我节省了这么多时间.
以上是大佬教程为你收集整理的需要帮助调试共享库无法加载的原因. Android NDK全部内容,希望文章能够帮你解决需要帮助调试共享库无法加载的原因. Android NDK所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。