You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android ndk-build报错:std命名空间中无shared_mutex类型如何解决?

解决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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 16:54:18