首页 > 解决方案 > NDK 需要 gnustl_static std::string 而不是 std::_ndk1::string

问题描述

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

我无法使用“-DANDROID_STL=gnustl_shared”编译我的钩子,因为它不再存在并且正在使用的其他库需要 libc++。

文档中提到了这个https://developer.android.com/ndk/guides/cpp-support “各种 STL 互不兼容。例如,libc++ 中 std::string 的布局与它在 gnustl 中”,这正是问题所在。

标签: androidc++android-ndk

解决方案


要使用gnustl,您可以使用NDK r.17或更早版本编译所有本机代码。这是一条危险的道路,因为从那时起,许多重要的错误(包括与安全相关的错误)都已得到修复。

另一种不受支持(且不推荐)的解决问题的方法是从 NDK r.17 获取gnustl源代码并使用最新的 NDK 版本编译它们。

您最好的选择是使用最新版本的 NDK 及其c++_shared运行时库重新构建所有依赖项。


推荐阅读