android - NDK 需要 gnuSTL_static std::string 而不是 std::_ndk1::string

标签 android c++ android-ndk

我正在挂接一个使用 gnuSTL std::string 而不是 libc++ std::_ndk1::string 编译的现有库。如果我尝试设置或访问这些字符串,我只会得到垃圾。如何在我的 Hook 应用程序中将我的 std::string 转换为 std::_ndk1::string,反之亦然?

我无法使用“-DANDROID_STL=gnuSTL_shared”编译我的钩子(Hook),因为它不再存在并且其他正在使用的库需要 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 运行时库重新构建所有依赖项。

关于android - NDK 需要 gnuSTL_static std::string 而不是 std::_ndk1::string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63844356/

相关文章:

android - 在 Android 中禁用搜索按钮(快速搜索框)

java - Android:打开隐藏的 webview Activity 或 fragment

c++ - 如何阻止命令接受输入?

c++ - 继续收到错误: expected primary-expression before ' , ' token

android - 确定 Android 上的确切屏幕翻转时间

android - 从 NDK 中的像素数组创建 Android 的可变位图

来自 Eclipse 的 Android Studio

android - 永远不会调用 OnInfoListener

C++ USB 与 USB 复合设备 (usbccgp.sys) 通信

android - 就 UI 而言, native Activity 与 SDK Activity