Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 找不到参数的方法cppFlags()arguments()_Android_C++_Cmake_Android Ndk_Ndk Build - Fatal编程技术网

Android 找不到参数的方法cppFlags()arguments()

Android 找不到参数的方法cppFlags()arguments(),android,c++,cmake,android-ndk,ndk-build,Android,C++,Cmake,Android Ndk,Ndk Build,我正在尝试使用 std::function 但是编译器抛出了一个错误 Error:(50, 10) error: no type named 'function' in namespace 'std' 我已尝试修改build.gradle文件 externalNativeBuild { ndkBuild { path "src/main/jni/Android.mk" } cmake { cppFlags "-std=c++11"

我正在尝试使用

std::function
但是编译器抛出了一个错误

Error:(50, 10) error: no type named 'function' in namespace 'std'
我已尝试修改build.gradle文件

externalNativeBuild {
    ndkBuild {
        path "src/main/jni/Android.mk"
    }
    cmake {
        cppFlags "-std=c++11"
        arguments "-DANDROID_STL=gnustl_static"
        path 'src/main/jni/CMakeLists.txt'
    }
}
但它不接受除
path
之外的参数,并抛出以下错误

Error:(28, 0) Could not find method arguments() for arguments [-DANDROID_STL=gnustl_static] on object of type com.android.build.gradle.internal.dsl.CmakeOptions.
请帮助我能够使用

std::function
更新

多亏了@alexcohn,我才能够配置标志和参数,现在我的文件看起来就是这样

apply plugin: 'com.android.library'

android {
    compileSdkVersion 25
    buildToolsVersion '26.0.2'

    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        externalNativeBuild {
            cmake {
                cppFlags "-std=c++11"
                arguments "-DANDROID_STL=gnustl_static"
            }
        }
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    externalNativeBuild {
        /*   ndkBuild {
               path "src/main/jni/Android.mk"
           }*/
        cmake {
            // cppFlags "-std=c++11"
            //arguments "-DANDROID_STL=gnustl_static"
            path 'src/main/jni/CMakeLists.txt'
        }
    }
}

dependencies {
    compile 'com.android.support:support-annotations:25.0.1'
}

build.gradle中有两个完全不同的块名为externalNativeBuild(谢谢,谷歌)

位于android顶级块下,它指定本机构建脚本的路径,cmakendkBuild(但不是两者都指定)

可以使用从gradle为本机生成指定一些参数。此块通常是defaultConfig块的子块,但也可以出现在flavors中(请参阅)

这些externalNativeBuild块也可以有cmakendkBuild子级,但只有与路径设置(见上文)匹配的子级才相关,另一个子级则被默默忽略


底线是,将块一分为二,并将每个块放在build.gradle层次结构中的正确位置。

您是否有
\include
到您的cpp源代码中?您可以进一步将
-DCMAKE\u CXX\u STANDARD=11
添加到您的参数设置中。@vre,是的,我尝试过,添加参数不起作用,它根本不接受任何参数,我可以在CMAke文件本身中设置这些参数吗?顺便说一句,参数行末尾有一个多余的逗号。我想这会妨碍其他选择被认可。您只在分隔不同的参数时使用逗号。@vre,您是对的,但这只是一个输入错误,我在插入代码时意外地键入了它,这是非常有价值的信息!!谢谢你,我现在会努力解决这个问题,至少我现在可以设置标志了。如果没有你的回答,我不知道我会怎么做!!它起作用了!!现在它工作了!!我想知道在哪里可以找到你提供的信息?所有的官方文件我都看过好几遍了!谢谢,谷歌