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

时间:2015-08-24 18:07:53

标签: android c++ android-studio android-ndk

我正在尝试将C ++文件集成到我的android项目中。 我尝试使用Android Studio的ndk功能,但我遇到了几个问题。所以我通过在.gradle文件中进行以下更改来阻止Android Studio创建自己的Android.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
}

其中&#34; ndk_build_path&#34;在gradle.properties文件中定义

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.mk文件放在src / main / java / jni文件夹中。

我收到以下错误 -

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

请帮忙!

2 个答案:

答案 0 :(得分:2)

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

NDK(10e)一直抱怨gnustl_xxxstlport_xxx丢失了内容,但我发现c++_static内容很顺利。

因此,您可以尝试将此添加到Application.mk

APP_STL:=c++_static

和Android.mk

LOCAL_CPPFLAGS  += -std=c++11

答案 1 :(得分:0)

我通过进行以下更改来解决问题 -

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

希望有人可以得到一些帮助。