Android Oreo 8.0本机C 崩溃:无效的PTHREAD_T传递给LIBC
Android Oreo 8.0 Native C++ crash: invalid pthread_t passed to libc
我有一个Android应用程序,该应用程序使用CMAKE将本机代码编译到我的应用程序中,并且它在运行Android 7.1的像素设备上运行良好。我决定将我的像素设备升级到Oreo 8.0,现在我无法在应用程序中输入本机C 代码。
这是撞车时的logcat转储:
A/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
A/DEBUG: Build fingerprint: 'google/sailfish/sailfish:8.0.0/OPR3.170623.007/4286350:user/release-keys'
A/DEBUG: Revision: '0'
A/DEBUG: ABI: 'arm64'
A/DEBUG: pid: 29454, tid: 30950, name: Thread-24 >>> com.myapp.nativecppapp <<<
A/DEBUG: signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
A/DEBUG: Abort message: 'invalid pthread_t 0x727d3004f0 passed to libc'
A/DEBUG: x0 0000000000000000 x1 00000000000078e6 x2 0000000000000006 x3 0000000000000008
A/DEBUG: x4 0000000000000000 x5 0000000000000000 x6 0000000000000000 x7 0000000000000030
A/DEBUG: x8 0000000000000083 x9 222b2e8c5b032e6a x10 0000000000000000 x11 0000000000000001
A/DEBUG: x12 ffffffffffffffff x13 0000000000000001 x14 0000000000000000 x15 000849a75d18b53a
A/DEBUG: x16 00000072a8aee2f8 x17 00000072a8a905d0 x18 00000072a70fef30 x19 000000000000730e
A/DEBUG: x20 00000000000078e6 x21 0000007286081ac0 x22 000000728609b998 x23 0000007286081a88
A/DEBUG: x24 0000007286081ac4 x25 000000727d3fcee0 x26 000000727d3fceb8 x27 00000000000001cc
A/DEBUG: x28 000000727fe6b000 x29 000000727d3fcc20 x30 00000072a8a44994
A/DEBUG: sp 000000727d3fcbe0 pc 00000072a8a905d8 pstate 0000000060000000
A/DEBUG: backtrace:
A/DEBUG: #00 pc 00000000000695d8 /system/lib64/libc.so (tgkill+8)
A/DEBUG: #01 pc 000000000001d990 /system/lib64/libc.so (abort+88)
A/DEBUG: #02 pc 000000000002516c /system/lib64/libc.so (__libc_fatal+116)
A/DEBUG: #03 pc 0000000000066470 /system/lib64/libc.so (_Z23__pthread_internal_findl+164)
A/DEBUG: #04 pc 0000000000065fa8 /system/lib64/libc.so (pthread_detach+16)
A/DEBUG: #05 pc 0000000000043528 /data/app/com.myapp.nativecppapp-SwBY2G1qycu-8Vec8QIe8w==/lib/arm64/libNativeLib.so
A/DEBUG: #06 pc 000000000002a6e4 /data/app/com.myapp.nativecppapp-SwBY2G1qycu-8Vec8QIe8w==/lib/arm64/libNativeLib.so
A/DEBUG: #07 pc 0000000000052430 /data/app/com.myapp.nativecppapp-SwBY2G1qycu-8Vec8QIe8w==/lib/arm64/libNativeLib.so
A/DEBUG: #08 pc 000000000005176c /data/app/com.myapp.nativecppapp-SwBY2G1qycu-8Vec8QIe8w==/lib/arm64/libNativeLib.so
A/DEBUG: #09 pc 000000000004339c /data/app/com.myapp.nativecppapp-SwBY2G1qycu-8Vec8QIe8w==/lib/arm64/libNativeLib.so
A/DEBUG: #10 pc 0000000000065f88 /system/lib64/libc.so (_ZL15__pthread_startPv+36)
A/DEBUG: #11 pc 000000000001ed24 /system/lib64/libc.so (__start_thread+68)
这是添加共享库
的CMAKE代码add_library(NativeLib SHARED IMPORTED)
set_property(TARGET NativeLib PROPERTY IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/NativeLib/Android/Release/${ANDROID_ABI}/libNativeLib.so")
然后共享库将链接到目标。
正如我所说,这一切都在Android 7.1上完美运行,并将设备升级到8.0引起了这一崩溃,这是一个新错误吗?我确实在此处读过8.0的"本地库"更改。
我还在图书馆里读了阅读,然后回来了,这看起来还可以8.0:
LOAD 0x000000 0x0000000000000000 0x0000000000000000 0x1b61c8 0x1b61c8 R E 0x10000
LOAD 0x1b6750 0x00000000001c6750 0x00000000001c6750 0x015fc0 0x085260 RW 0x10000
DYNAMIC 0x1c1010 0x00000000001d1010 0x00000000001d1010 0x0002c0 0x0002c0 RW 0x8
GNU_EH_FRAME 0x1871a0 0x00000000001871a0 0x00000000001871a0 0x006bac 0x006bac R 0x4
GNU_STACK 0x000000 0x0000000000000000 0x0000000000000000 0x000000 0x000000 RW 0x10
GNU_RELRO 0x1b6750 0x00000000001c6750 0x00000000001c6750 0x00b8b0 0x00b8b0 R 0x1
有什么想法吗?谢谢!
问题在 __ pthread_internal_find 函数中。
在Android 8.0之前,如果在线程列表中找不到线程,则仅返回一个NULLPTR。但是,在Android 8.0中,将发生致命。
无论如何,这需要更仔细地处理Posix的东西...
请参阅pthread_internal.cpp中的最后一个代码块,以获取参考。
相关文章:
- 带有 -stdlib=libc++ 的 clang++ 9.0.1 找不到<optional>
- C++17 - 使用自定义分配器的节点提取/重新插入 - 适用于 clang++/libc++,但不适用于 libstd
- 安装 libc++ 时出现问题
- 在 c++11 中为 pthread 设置调度参数
- 尝试从头开始实现Leetcode的FizzBuzz多线程问题。收到"libc++abi.dylib: terminating"错误
- Eclipse CDT clang 工具链 - 无法从链接器选项中删除 stdlibc++,但可以添加 libc++,E
- 如果不包含 pthread,为什么 GCC 的线程标准库实现会抛出异常?
- pthread只有在线程数量较少时才可以正常工作
- pthread执行时间比顺序执行时间差
- 使用 -pthread 如何不违反 ODR 规则?
- 使用 pthread 的多线程
- 我可以在 ndk 中使用带有 libc++ 的实验性文件系统吗?
- 销毁 pthread 互斥体和 C++ 中的取消初始化顺序
- 函数 AfxEndThread 中的读取访问冲突"pThread-> was nullptr"
- 锁定步进pthread互斥
- E/libc++abi:终止于类型为google::protobuf::FatalException的未捕获异常
- libc++abi未定义符号:_ZTVN10__cxxabif120__si-class_type_infoE
- Pthread段错误,使用指向main中变量的指针
- pthread导致的内存泄漏
- GCC:--静态链接到pthread的整个存档配方在最近的GCC版本中停止工作