【问题标题】:Build command failed:fatal error: 'string' file not found构建命令失败:致命错误:找不到“字符串”文件
【发布时间】:2019-02-12 08:34:19
【问题描述】:

我正在尝试使用最新的 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.

下面是appbuild.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'
    }
}

【问题讨论】:

  • 看起来你为你的externalNativeBuild 混合了ndk 和cmake。尝试只使用 ndk 或 cmake。
  • ndk 和 ndkBuild 是两个不同的东西。所以为ndk 和externalNativeBuild { cmake 设置选项应该是非常好的。但是,OP 似乎已将 externalNativeBuild 块放在 ndk 块内,并且 那 看起来不正确。

标签: android android-ndk ndk-build


【解决方案1】:

我的项目中的 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,因为它可以工作

【讨论】:

  • 删除 .externalNativeBuild 成功了
【解决方案2】:

在每个 NDK 版本上将 -stdlib=libc++ 与 CMake 一起使用要么是多余的,要么是损坏的。你想要的是-DANDROID_STL=c++_shared(或-DANDROID_STL=c++_static 用于静态库,或者对于 NDK r18+ 上的静态库什么都没有,因为这是默认设置)。

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

【讨论】:

    猜你喜欢
    • 2021-03-06
    • 2022-07-29
    • 1970-01-01
    • 2019-05-30
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 2019-04-05
    • 2016-04-26
    相关资源
    最近更新 更多