- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个 Android 应用程序,它使用 Cmake 将 native 代码编译到我的应用程序中,并且它在运行 Android 7.1 的 Pixel 设备上运行良好。我决定将我的 Pixel 设备升级到 Oreo 8.0,现在我无法在我的应用程序中输入 native 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 的“ native 库”更改 https://developer.android.com/about/versions/oreo/android-8.0-changes.html .
我还在我的库上运行了 readelf 并取回了它,这对于 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 中的最后一个代码块供引用。
关于Android Oreo 8.0 native C++ 崩溃 : invalid pthread_t passed to libc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46457800/
我正在尝试向 iOS 应用商店提交更新。我要从 Buzztouch 应用程序转到 Sprite Kit 应用程序。我能够存档 Xcode 项目并提交它。该应用程序的状态为“上传已收到”,但大约一分钟后
我收到了这个奇怪的警告。我不确定是什么原因造成的。 .dia文件扩展名应该表示核心有向图图形文件。我没有添加,应用程序几乎没有用户界面。 最佳答案 我对这个答案并不满意,但我认为它可以帮助人们,直到找
下面用作 Uri 参数的程序集限定字符串在 XAML 中工作,但在代码中使用时会出现错误。 我尝试了各种 UriKind,结果都相同。我该如何解决这个问题? [Test] public void La
我正在开发一个 Angular 应用程序,目的是将其部署到移动设备和 Web 浏览器上。设置表单样式以显示无效输入时,我应该定位 Angular“ng-invalid”类还是 HTML5“:inval
我有一个在 Google App Engine 上运行的应用程序,它是 Android 应用程序的后端。它基本上是 Android 应用程序和在我自己的服务器上运行的 MySQL 数据库之间的桥梁。
我的代码是这样的: func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle,
I need to encrypt using Python with the A256GCM algorithm, and getting back a JWT that I need to
无法成功编译webpack并生成bundle.js文件。据我了解,我的 src_dir 和 dist_dir 变量能够指向正确的路径,但在尝试编译时我仍然始终收到两个错误之一。 配置对象无效。 Web
因此,当我在 postgres 上运行 regexp_matches 时收到一条错误消息,并且无法弄清楚如何通过它。它似乎在 regex101 等 reg_exp 测试站点上运行良好,但不幸的是在实际
这些是我正在使用的导入: import com.novell.ldap.*; import java.io.UnsupportedEncodingException; 我正在尝试进行一个非常简单的密码
在记录器函数的简写情况下,Pylint 提示 Invalid constant name "myprint"(invalid-name)。 # import from utils import get
我试图创建一个HTML输入标签,该标签仅接受以2种格式之一输入的数字,并拒绝所有其他输入。 我只想接受以下格式的数字,包括破折号: 1234-12 和 1234-12-12 注意:不是日期,而是合法的
我一直在尝试使用 Bootstrap 的表单样式处理 AngularJS 的电子邮件验证,并遇到了这个 CSS block 。 input:focus:required:invalid, textar
我正在编写一个程序,以确保我了解如何在 C 中正确实现单向链表。我目前正在哈佛的 CS50 类(class)中学习,并且使用本教程,因为 CS50 人员不解释链接详细列出数据结构:https://ww
此问题与询问同一消息的另一个问题不重复,但在另一个上下文中。这个问题的上下文只是关于上传截图图像和获取消息。 今天,我在将图片上传到 App Store Connect 时收到一条新消息: Inval
我的代码似乎运行良好,但当我滑动以删除 UITableView 中的一行时,应用程序崩溃并显示以下内容: 错误 LittleToDoApp[70390:4116002] *** Terminating
当我尝试发送语音消息时,总是收到无效的url错误。我正在使用Whisper将音频转换为文本,但由于某种原因,我似乎无法将文件传递给Whisper。当我在Java脚本中使用它而不是在TypeScrip中
我正在尝试在 flutter 上对 http 客户端进行单元测试。在模拟 http 和我的存储库类之后: void main() { MockHttpCLient mockHttpCLient;
我正在使用 pandoc 作为一个库,相关的代码片段是: module Lib ( latexDirToTex, latexToTxt ) where import qualified
我正在开发一个(相对简单的)Rails应用程序。我正在使用Devise gem处理用户 session 。每当我导航到localhost:3000/users/sign_in时,我都会看到Devise
我是一名优秀的程序员,十分优秀!