使用Android NDK和std :: vector时修复Eclipse错误

10

我正在使用 Eclipse 开发一个使用 NDK 的 Android 应用程序。我的应用程序中有向量,并且我已经采取了必要的措施来获取它们,包括在 Application.mk 中包含

APP_STL := stlport_static

一切都正常工作,可以编译和运行,但当我使用向量时,Eclipse 会不断给我报错。

std::vector<int> blah
例如会产生一个错误。如果我删除错误并继续进行,它将编译和运行良好。
我在我的项目配置中添加了${NDKROOT}/sources/cxx-stl/gnu-libstdc++/include ,路径为 C++ General -> Paths and Symbols -> include。
这样可以很好地解决#include <vector> 的错误(在添加上述路径之前,我遇到了此错误),但我仍然使用矢量时出现错误。
我该如何使Eclipse不再给我报错?
编辑:
例如错误:Symbol 'vector' could not be resolved 编辑2:
我试图添加
using namespace std;

然后使用向量 blah,这导致了不同的错误:

无效的模板参数


1
你在问题中提到了“错误”这个词7次,但完全没有说出实际的错误是什么 - richq
你说得对,我已经更新了问题并列出了具体的错误。 - nkassis
啊,好的。我觉得我知道这里的问题是什么,但是我不知道解决方案是什么。听起来你正在混合使用Java和C ++,但是C ++ 部分有点“困惑”。我在使用纯C时也遇到了同样的问题。我放弃了并回归了Vim,但如果你想坚持使用Eclipse,这并不是很有帮助。 - richq
1
我按照这个小指南创建了一个混合的C++和Java项目:http://mhandroid.wordpress.com/2011/01/23/using-eclipse-for-android-cc-development/ 除了上述问题之外,它运行得非常好。我使用的每个其他头文件和引用(例如,我使用了Android日志记录头文件)都被找到了,除了像stlport中的问题(但它确实可以找到其中的头文件)。 - nkassis
4个回答

13

我已经添加了${NDKROOT}/sources/cxx-stl/gnu-libstdc++/include

在我的项目配置下的C++ General -> Paths and Symbols -> include

是的,就是这样。我尝试添加相同的内容,得到了相同的结果。 但是,如果你添加stl_port头文件,

${NDKROOT}/sources/cxx-stl/stlport/stlport

这会起到作用。当然,没有必要更改。

APP_STL := stlport_static

它只在Eclipse索引中有效。在你要使用存在于gnu-libstdc++中而不存在于stl-port中的东西之前,它将非常有用。


哦,我正在使用stlport,并且路径为${NDKROOT}/sources/cxx-stl/stlport/stlport,但我仍然收到错误消息:无法解析符号“vector”。 - j00hi

2

引用

我正在使用Eclipse Indigo RC2。

我在Android.mk中添加了以下行:

LOCAL_C_INCLUDES += ${NDKROOT}/sources/cxx-stl/stlport/stlport

并在Application.mk文件中添加以下内容

APP_STL := stlport_static

然后我的ndk stlport路径会自动添加在

属性 -> C++常规 -> 路径和符号 -> 包含

祝好运!^^


1
起初,我们遇到了与地图相关的问题,并尝试添加建议中的“路径和符号”,但仍然无法解决。
后来,我们不再使用

标签来结束代码块,而是使用标签,这样问题就得到了解决。
#include <map>

我们使用了


#include <stl/_map.h>

错误消失后,我们切换回使用include <map>。Eclipse不再抱怨“符号无法解析”。看起来Eclipse有一个缓存,除非你明确告诉它正确的位置来查找符号,否则它可能会出现问题。

0

我不知道它在哪个阶段运作,但是:

  1. 在Application.mk中添加APP_STL := gnustl_static

  2. 在项目属性->C/C++ General -> Paths and Symbols中添加以下内容:
    'NDK根目录'/'你的android平台目录'/arch-arm/usr/include 'NDK根目录'/sources/cxx-stl/gnu-libstdc++/4.9/include 'NDK根目录'/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include/bits

  3. 关闭所有警告错误:在项目属性->C++ General->Code Analisis中进行设置。

  4. 在项目属性->C++ Build-> Builder Settings ->取消勾选使用默认构建命令。将构建命令设置为空。
  5. 接下来配置NDK Builder:在项目属性->Builders-> New-> Program中填写名称(你的构建配置名称)、位置(NDK根目录路径)、工作目录(项目目录路径)。-> 刷新并检查特定资源(项目中的libs文件夹)。-> 在Build Options中勾选Specify working set of relevant resources,并将'jni'文件夹更改为你的源代码所在的文件夹。

在Ubuntu 15.04中工作。Eclipse 3.8.1。Android NDK r10e。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接