android - NDK 需要 gnustl_static std::string 而不是 std::_ndk1::string
问题描述
我正在挂钩使用 gnustlstd::string
而不是 libc++编译的现有库std::_ndk1::string
。如果我尝试设置或访问这些字符串,我只会得到垃圾。如何在我的钩子应用程序中转换我std::string
的std::_ndk1::string
,反之亦然?
我无法使用“-DANDROID_STL=gnustl_shared”编译我的钩子,因为它不再存在并且正在使用的其他库需要 libc++。
文档中提到了这个https://developer.android.com/ndk/guides/cpp-support “各种 STL 互不兼容。例如,libc++ 中 std::string 的布局与它在 gnustl 中”,这正是问题所在。
解决方案
要使用gnustl,您可以使用NDK r.17或更早版本编译所有本机代码。这是一条危险的道路,因为从那时起,许多重要的错误(包括与安全相关的错误)都已得到修复。
另一种不受支持(且不推荐)的解决问题的方法是从 NDK r.17 获取gnustl源代码并使用最新的 NDK 版本编译它们。
您最好的选择是使用最新版本的 NDK 及其c++_shared运行时库重新构建所有依赖项。
推荐阅读
- python - 选择器套接字 OSError:[Errno 9] 子进程中的文件描述符错误
- bpmn - 用 BPMN 2.0 元模型表示执行历史
- javascript - Promise.all 等待 observables
- spring - 我需要为我的 JPA 实体生成 Liquibase 变更集。我怎样才能做到这一点?
- python - 散点图中的无序轴
- sql - ORDER BY Report Builder 3.0 中的聚合列
- feathersjs - TypeError:无法读取 ServiceGenerator.writing 中未定义的属性“开玩笑”
- ios - 文件资源管理器/文件管理器,如 android
- php - 带有 DATE COMPARE 条件的 FOREACH (PHP)
- clojure - Clojure 拉链删除所有正确的兄弟姐妹