Android ndk-build报错:std命名空间中无shared_mutex类型如何解决?
问题原因
std::shared_mutex是C17标准引入的特性,但Android NDK的libc库对其支持依赖于APP_PLATFORM版本和NDK版本:
- 旧版Android平台(android-24及以下)的系统头文件中未包含该类型定义
- 低版本NDK(r20及以下)对C++17部分特性支持不完整
具体解决步骤
提升APP_PLATFORM版本
修改Application.mk中的APP_PLATFORM为android-26或更高版本(对应Android 8.0+):APP_PLATFORM := android-26从android-26开始,libc++才完整支持
std::shared_mutex。确认NDK版本
使用NDK r21及以上版本编译项目,更早的NDK版本对C++17特性的支持存在缺失。保持STL配置正确
当前APP_STL := c++_static是官方推荐的配置(gnustl已被废弃),无需修改,确保该配置与提升后的APP_PLATFORM版本兼容即可。
额外代码修正
你的test.cpp中Java_com_example_hellojni_HelloJni_string2FromJNI函数缺少返回值,会导致编译警告/错误,需补充返回逻辑,示例如下:
jstring Java_com_example_hellojni_HelloJni_string2FromJNI( JNIEnv* env, jobject thiz ) { myMutex.lock(); // 补充业务逻辑 myMutex.unlock(); return env->NewStringUTF("Hello from JNI!"); }
内容的提问来源于stack exchange,提问作者user1884325
相关产品推荐
相关产品推荐

