生成命令失败:严重错误:找不到“字符串”文件

时间:2019-02-12 08:34:19

标签: android android-ndk ndk-build

我正在尝试使用最新的Gradle构建和运行现有的Android NDK项目。但是我在运行应用程序时遇到错误。

Build command failed.
Error while executing process D:\rapiscan\Android\Sdk\cmake\3.6.4111459\bin\cmake.exe with arguments {--build D:\rapiscan\codebase\NGC\NextGenConsole\app\.externalNativeBuild\cmake\debug\x86 --target UiDataProvider}
[1/4] Building CXX object UiDataProvider/CMakeFiles/UiDataProvider.dir/UiCmdHandler.cpp.o
[2/4] Building CXX object UiDataProvider/CMakeFiles/UiDataProvider.dir/UiDataProvider.cpp.o
[3/4] Building CXX object UiDataProvider/CMakeFiles/UiDataProvider.dir/UiMessageGenerator.cpp.o
FAILED: D:\rapiscan\Android\Sdk\ndk-bundle\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++.exe  --target=i686-none-linux-android23 --gcc-toolchain=D:/rapiscan/Android/Sdk/ndk-bundle/toolchains/llvm/prebuilt/windows-x86_64  -DUiDataProvider_EXPORTS -IUiDataProvider -ID:/rapiscan/codebase/NGC/NextGenConsole/malibu/UiDataProvider -ID:/rapiscan/Android/Sdk/ndk-bundle/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/include/arm-linux-androideabi -ID:/rapiscan/codebase/NGC/NextGenConsole/malibu/Common -pthread -O0 -fno-limit-debug-info  -fPIC   -std=gnu++14 -MD -MT UiDataProvider/CMakeFiles/UiDataProvider.dir/UiDataProvider.cpp.o -MF UiDataProvider\CMakeFiles\UiDataProvider.dir\UiDataProvider.cpp.o.d -o UiDataProvider/CMakeFiles/UiDataProvider.dir/UiDataProvider.cpp.o -c D:\rapiscan\codebase\NGC\NextGenConsole\malibu\UiDataProvider\UiDataProvider.cpp
In file included from D:\rapiscan\codebase\NGC\NextGenConsole\malibu\UiDataProvider\UiDataProvider.cpp:1:

D:/rapiscan/codebase/NGC/NextGenConsole/malibu/UiDataProvider/UiDataProvider.h:5:10: fatal error: 'string' file not found

`#include <string>`


1 error generated.

以下是在应用build.gradle中指定的ndk配置

ndk {

            ndk {  
                abiFilters 'armeabi-v7a', 'arm64-v8a','x86'
            }
           externalNativeBuild {
                cmake {
                    arguments  '-DCMAKE_BUILD_TYPE=Debug',"-DPROJECT_DIR:STRING=${mb_sdk_path}",'-DANDROID_PLATFORM=android-23',  '-DANDROID_TOOLCHAIN=clang', '-DANDROID_ARM_NEON=TRUE', "-DPATH_TO_MALIBU:STRING=${mb_sdk_path}" ,"-DANDROID_STL=c++_static",
                    "-DTARGET_PLATFORM=Windows","-DUNIX=FALSE"
                    cppFlags "-std=c++14 -stdlib=libc++ -frtti -fexceptions"
                }
            }
        }

和下面是build.gradle

buildscript {
    repositories {
        jcenter()
        google()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.3.1'
        classpath 'com.novoda:bintray-release:0.9'
    }
}

2 个答案:

答案 0 :(得分:0)

在每个NDK版本上,将-stdlib=libc++与CMake一起使用是多余的,或者是无效的。您想要的是-DANDROID_STL=c++_shared(对于静态库,则是-DANDROID_STL=c++_static;对于NDK r18 +上的静态库,则什么也不是,因为这是默认设置)。

传递-stdlib=libc++可能会导致编译器在较早的NDK版本上查找错误的位置,并且是r19 +上的默认位置。

答案 1 :(得分:0)

我在项目中的上一个版本的gradle和cmake上也遇到了同样的问题,但是我发现只有在 Build Variants 错误的情况下才会发生,例如目标是debug-armeabi-v7a,您正在release进行编译,请检查正确的变体目标。

My settings:
NDK 19.1.5304403
CMake 3.10.2

build.gradle:

defaultConfig {
    ...
    multiDexEnabled true
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    ...
    externalNativeBuild {
        cmake {
        }
    }
    externalNativeBuild {
        cmake {
            path "CMakeLists.txt"
        }
    }
    ...

注意::有时候,您也应该删除有效的隐藏目录rm -rf app/.externalNativeBuild

相关问题