注意:这显然是 StackOverflow 上经常出现的问题,但是 - 就我所见 - 人们永远找不到方法,或者他们的解决方案对我不起作用
问题:
我正在使用 Eclipse Juno ADT。在我尝试更新 NDK 之前,一切正常。我用新版本(即)替换了我的ndk
文件夹(即),并且在我的配置中,我将包含的内容从 g++ 4.6 更改为 4.7。ndk-r8d
ndk-r8e
Paths and Symbols
它似乎打破了我的索引:我可以编译我的代码,但是 Eclipse 给出了语义错误,就像在 [ 1 ] 和 [ 2 ] 中一样。错误主要来自 OpenCV4Android 使用的符号,例如distance
, pt
,queryIdx
和trainIdx
.
当我尝试备份到旧配置时,索引仍然损坏!我找不到改变这种情况的方法。
我试过的
- 清理项目
- “索引”子菜单中的重建、刷新和所有其他选项(在项目上“右键单击”时)
- 在首选项中禁用/启用索引器
- 验证
trainIdx
仅出现在我的 OpenCV4Android 中的符号是否包含在该Paths and Symbols
部分中。 - 更改我在该
Paths and Symbols
部分中包含的顺序。我基本上试图将 OpenCV 包含在开头和结尾。
一些观察
什么不工作
我假设它是CDT 索引,原因如下:
- 在命令行中,我可以使用
ndk-build clean
and构建我的项目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
是。
任何评论将不胜感激。