【发布时间】:2013-05-23 02:23:58
【问题描述】:
注意:这显然是 StackOverflow 上经常出现的问题,但是 - 就我所见 - 要么人们永远找不到方法,要么他们的解决方案对我不起作用
问题:
我正在使用 Eclipse Juno ADT。在我尝试更新 NDK 之前,一切正常。我用新版本(即ndk-r8e)替换了我的ndk 文件夹(即ndk-r8d),并且在我的Paths and Symbols 配置中,我将包含的内容从g++ 4.6 更改为4.7。
它似乎破坏了我的索引:我可以编译我的代码,但是 Eclipse 给出了语义错误,就像 [1] 和 [2] 中的错误。错误主要来自OpenCV4Android使用的符号,如distance、pt、queryIdx和trainIdx。
当我尝试备份到旧配置时,索引仍然损坏!我找不到改变这种情况的方法。
我尝试过的
- 清理项目
- “索引”子菜单中的重建、刷新和所有其他选项(在项目上“右键单击”时)
- 在首选项中禁用/启用索引器
- 验证
trainIdx等符号仅出现在我的 OpenCV4Android 中,包括在Paths and Symbols部分中。 - 在
Paths and Symbols部分更改我的包含顺序。我基本上尝试将 OpenCV 包含在开头和结尾。
一些观察
什么不工作
我认为它是 CDT 索引,原因如下:
- 在命令行中,我可以使用
ndk-build clean和ndk-build构建我的项目。 - 当我启动 Eclipse 时,在我打开一个 C++ 文件(来自
jni文件夹)之前,我没有任何错误。 - 我总是可以构建项目,但是只要我打开了一个C++文件,我就不能再运行应用程序了,因为很多
Field '<name>' could not be resolved. - 如果我不打开 C++ 文件,Eclipse 不会报告任何错误,并且可以成功构建和部署 Android 应用程序。
有趣的事实
以下代码在line、queryIdx、pt 上报告错误:
cv::line(mRgb, keypointsA[matches[i].queryIdx].pt, keypointsB[matches[i].trainIdx].pt, cv::Scalar(255, 0, 0, 255), 1, 8, 0);
如果我这样写,它可以工作:
cv::DMatch tmpMatch = matches[i];
cv::KeyPoint queryKp = keypointsA[tmpMatch.queryIdx];
cv::KeyPoint trainKp = keypointsB[tmpMatch.trainIdx];
cv::line(mRgb, queryKp.pt, trainKp.pt, cv::Scalar(255, 0, 0, 255), 1, 8, 0);
并不是所有的 OpenCV 函数都未解析:只有 pt、queryIdx 和 trainIdx 是。
任何评论将不胜感激。
【问题讨论】:
-
打开eclipse的问题透视图。它应该显示大量错误(每个条目旁边带有红色标记的条目)。删除所有条目并重建您的应用程序。我有同样的问题,这真的很无聊
-
@blackbelt Blackbelt 提供了一个快速解决方案,如果您再次遇到该问题(并且有一两个条目只是困扰您)。
-
这是 S.O 问题应该是什么样的完美示例。很好地划分为“问题”、“什么不起作用”、“我尝试过的”等。也许我们应该将新注册的用户作为一个例子。
标签: android c++ eclipse opencv android-ndk