NDK 无法识别某些头文件,例如 <mutex> 和<future>

NDK not identifying certain header files like <mutex> and <future>

本文关键字:lt gt future 例如 mutex 识别 文件 NDK      更新时间:2023-10-16

我正试图将c++文件集成到我的android项目中。我尝试使用Android Studio的ndk功能,但我有几个问题。所以我阻止了Android Studio创建自己的Android。通过在我的.gradle文件中进行以下更改来修改Mk文件-

    sourceSets.main {
        jni.srcDirs = [] 
        jniLibs.srcDir 'src/main/libs'
   }

我创建了一个gradle任务来编译我的库文件。

task ndkBuild(type: Exec) {
    commandLine ndk_build_path, '-C', file('src/main/jni').absolutePath
}
tasks.withType(JavaCompile) {
    compileTask -> compileTask.dependsOn ndkBuild
}

其中ndk_build_path是在gradle中定义的。属性文件

ndk_build_path=/Users/shadabunique/Library/Android/sdk/ndk-bundle/ndk-build

我使用的平台是Mac。

c++文件中的头文件是-

#include <stdio.h>
#include <iostream>
#include <unistd.h>
#include <vector>
#include <ctime>
#include <sys/time.h>
#include <cmath>
#include <queue>
#include <mutex>
#include <future>

我还创建了Application。带有内容的Mk文件-

APP_ABI := all
APP_STL := gnustl_static
APP_STL :=stlport_static

我把所有的c++文件,Android。mk和Application。src/main/java/jni目录下的Mk文件

我得到以下错误-

mutex: No such file or directory
future: No such file or directory

我在将c++11代码移植到ndk上时遇到了类似的问题。

NDK (10e)一直抱怨gnustl_xxxstlport_xxx缺少东西,但我发现c++_static很顺利。

你可以试着把这个添加到application。mk

APP_STL:=c++_static

和Android.mk

LOCAL_CPPFLAGS  += -std=c++11

我通过做以下更改来解决这个问题-

Android。Mk -

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := myLib
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libmyLib.so
LOCAL_LDLIBS += -llog
include $(PREBUILT_SHARED_LIBRARY)

Application.mk

APP_ABI := all
APP_STL :=c++_static

希望有人能得到一些帮助。