【问题标题】:Android Studio 2.2.3 cannot find <vector>Android Studio 2.2.3 找不到 <vector>
【发布时间】:2017-05-14 14:07:45
【问题描述】:

配置

操作系统:Ubuntu 16.04

Android Studio 版本:2.2.3

键码

~/project/build.gradle:

buildscript {
      repositories {
          jcenter()
      }
      dependencies {
          classpath 'com.android.tools.build:gradle:2.2.3'
      }
  }
  ...

~/project/library/build.gradle:

apply plugin: 'com.android.library'

android {
    ...

    defaultConfig {
        ...

        externalNativeBuild {
            cmake {
                arguments '-DANDROID_TOOLCHAIN=clang',
                        '-DANDROID_STL=gnustl_static'
                     // I also tried '-DANDROID_STL=gnustl_shared', result is same
            }
        }
    }

    externalNativeBuild {
        cmake {
            path "src/main/cpp/CMakeLists.txt"
        }
    }

    ...
}

~/project/app/build.gradle:

apply plugin: 'com.android.application'

android {
    ...
}

dependencies {
    ...
    compile project(':library')
    ...
}

~/project/settings.gradle

include ':app', ':library'

~/project/library/src/main/cpp/test.h:

#include <vector>   // vector is red, says "cannot find vector"
#include <stdint.h>

class test {

private:
    std::vector<int32_t> array;  // std is red, says "can't resolve container std"
};

问题描述

在文件~/project/library/src/main/cpp/test.h 中,#include &lt;vector&gt; 中的vector 是红色的。 当我将鼠标移到它上面时,它会弹出一个窗口,上面写着Cannot find 'vector'std::vector&lt;int32_t&gt; 中的 std 也是红色的。我将鼠标移到它上面,它显示Can't resolve container 'std'

这个项目没有编译错误。它可以编译成功并安装在我的手机上。问题是它有语法错误。我没有对某些变量进行代码补全,例如 test.h 中的 array

我找到的一些信息

我导入了包含#include &lt;vector&gt; 的项目teapots。 Android Studio 确实为此项目解析了vectorstd 符号。

我的问题

我做错了什么?为什么项目teapots 没有这个问题? 我的项目和teapots 之间的主要区别是什么,使后者能够解决vectorstd 而我的不是?


更新

我在 Android Studio 中创建了一个新项目。在新项目向导的第 1 步中,我检查了include C++ Support。在最后一步中,我为C++ Standard 选项保留了默认的Toolchain Default。单击finish 按钮后,Android Studio 自动为我创建了文件native-lib.cpp。我在此文件的第 3 行添加了代码 #include &lt;vector&gt;。这次 Android Studio 正确解析了符号 vector。然后我为这个项目创建了一个新的模块库mylibrary,并在其中添加了一个cpp 文件夹和test.h,它还解析了符号vector(mylibrary 模块的build.gradle 已正确添加CMake我的东西)。但我的问题是我需要将vector添加到我现有的项目中,而我现有的项目无法解析符号vector

【问题讨论】:

  • vector有文件扩展名吗??
  • 无扩展。 @codeMan

标签: android android-ndk cmake ndk-build


【解决方案1】:

我想通了。我没有在CMakeLists.txt 中包含C++ 文件test.h。一旦我将它包含到CMakeLists.txt add_library 括号和同步项目中,红色语法错误就消失了。

【讨论】:

    【解决方案2】:

    我建议你看这里 - 这是一个很好的解决方案,指导 makefile 和代码本身:Can't include C++ headers like vector in Android NDK。我过去曾使用过它,它对我有帮助。

    【讨论】:

    • 我的问题更像Maksim Dmitriev's answer。我的项目没有编译错误。它可以编译成功并安装在我的手机上。问题是它有语法错误。我没有对某些变量进行代码完成,例如我的 test.h 示例中的 array
    【解决方案3】:

    bu2zhouzhu 的答案是正确的。我只是解释一下。

    文件中的问题。 每当您添加 .cpp 文件时,您都需要像这样在 CMakeLists.txt 中进行更新

    add_library(libraryName SHARED
    file_name1.cpp
    file_name2.cpp)
    

    就我而言。

    add_library( native-lib SHARED
             native-lib.cpp
             webp_engine.cpp
             webp_link.cpp)
    

    native-lib --> 库名称(默认名称,我不编辑)。

    webp_engine.cpp --> 我创建了文件。

    webp_link.cpp --> 我创建的文件

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-10
      • 2017-07-15
      • 1970-01-01
      • 2017-07-27
      • 2019-05-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多