注意:它显然是关于StackOverflow的一个经常出现的问题,但是 - 对于我所看到的 - 人们从来没有找到方法或者他们的解决方案对我不起作用
我正在使用Eclipse Juno ADT。在我尝试更新NDK之前,一切正常。我用新版本(即ndk
)替换了我的ndk-r8d
文件夹(即ndk-r8e
),并且在我的Paths and Symbols
配置中,我将包含更改为来自g ++ 4.6到4.7。
它似乎打破了我的索引:我可以编译我的代码,但是Eclipse会出现语义错误,就像在[1]和[2]中一样。错误主要是来自OpenCV4Android使用的符号,例如distance
,pt
,queryIdx
和trainIdx
。
当我尝试备份到旧配置时,索引仍然被破坏了!我找不到改变这种方法的方法。
trainIdx
等符号仅出现在Paths and Symbols
部分的OpenCV4Android中。Paths and Symbols
部分更改我的包含的顺序。我基本上试图将OpenCV包含在开头和结尾。我认为它是 CDT索引,原因如下:
ndk-build clean
和ndk-build
构建项目。jni
文件夹)之前我没有错误。Field '<name>' could not be resolved.
以下代码报告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
。
任何评论都会非常感激。
答案 0 :(得分:33)
在Eclipse环境中的所选项目首选项中,转到C / C ++ General - &gt;代码分析 - &gt;发射。确保未选中这两个复选框。关闭并重新打开项目或重新启动eclipse并重建项目。
答案 1 :(得分:10)
由于Eclipse上的Android本机代码索引不完整,我设法在以下非直观的方式启用NDK项目中的索引,无论您使用ndk-build
还是普通make
甚至是{{{} 1}}。我正在使用Kepler,但它也适用于旧版本。
cmake
- &gt; Properties
- &gt; C/C++ Build
- &gt;取消选中Tool Chain Editor
。Display compatible toolchains only
设为Current toolchain
。Linux GCC
,请将Current builder
设置为Android Builder
,否则请将其设置为ndk-build
(此步骤可能有误,请提前对不起如果是)。Gnu Make Builder
- &gt; Properties
- &gt; C/C++ Build
- &gt;确保Build Variables
为您的项目读取正确的命令;如果不是,请取消选中Build command
并更正(可能是Use default build command
或ndk-build
您想要的)。如果您在单独的终端中构建本机代码,则可以跳过此步骤。运行以下命令(根据您的喜好调整设置)。如果您对make -j5
没有写入权限,请添加sudo
,因为脚本无提示失败。
--install-dir
这是假设您使用GNU-STL。如果您使用另一个C / C ++库,则需要调整上面的命令,也可能需要调整下一个命令中的包含路径。
右键点击项目 - &gt; ./build/tools/make-standalone-toolchain.sh \
--platform=android-14 \
--install-dir=/opt/android-toolchain \
--toolchain=arm-linux-androideabi-4.8
- &gt; Properties
- &gt; C/C++ General
- &gt;转到Paths and Symbols
标签 - &gt;从Includes
- &gt;中选择GNU C++
单击Languages
并添加以下路径(假设您已将独立工具链安装到Add
):
/opt/android-toolchain
/opt/android-toolchain/include/
/opt/android-toolchain/include/c++/4.8/
/opt/android-toolchain/include/c++/4.8/arm-linux-androideabi/
/opt/android-toolchain/lib/gcc/arm-linux-androideabi/4.8/include/
/opt/android-toolchain/include/c++/4.8/backward/
/opt/android-toolchain/lib/gcc/arm-linux-androideabi/4.8/include-fixed/
在这里,您可以添加所需的每个包含路径。事实上,我的OpenCV是为Android而构建的,并且安装在独立的工具链中,因此我有以下内容:
/opt/android-toolchain/sysroot/usr/include/
现在,索引应该可行。您还应该能够运行/opt/android-toolchain/sysroot/usr/share/opencv/sdk/native/jni/include/
(或ndk-build
,如果这是您的构建方法),然后将项目部署到Eclipse内的设备。
Eclipse上的Android原生开发是不完整的,因为索引不是开箱即用的。这是因为必须支持多种体系结构(ARMv7,Intel等),多个STL选项,多个Android版本等。这就是为什么你有基于make
的{{1}}和整个NDK结构的原因,这也是为什么NDK开发非常不干净并且存在少量大量本机Android项目的原因。
一个重要的Android项目是OpenCV,他们必须开发一个1500多行的CMake脚本才能让它正确地为Android编译。在某些时候,他们试图将该脚本导出为基于CMake的Android构建系统,但它无法跟上NDK系统的变化并被放弃。这种支持应该在NDK内部。
默认的NDK构建系统应该只是独立的工具链,所有不同的架构/ C ++库都以存储空间为代价拥有自己的工具链,但具有清洁,直观和良好实践的优势。然后,您可以合并任何标准的交叉编译系统,该系统也在其他地方使用,经过测试并且是众所周知的,例如CMake。您可以,并且我认为您应该使用NDK的make
命令执行此操作,如上所示。但最后,这只是我的意见。如果您对ndk-build
感到满意,那就继续吧。
答案 2 :(得分:6)
实际上很难说是什么问题。以下是一些建议:
hello-jni
(它位于jni
的{{1}}文件夹中)。如果它运行没有问题,那么将OpenCV链接到您的项目就会出现问题。samples
中的android-ndk
位置了。这是问题Issue with build Android NDK project的链接。project properties -> c/c++ build -> environment
),手动删除Eclipse中的所有错误(在ndk-build -B
视图中选择所有错误,只需单击 delete )并尝试运行项目现在。有时这种“黑客”会帮助我运行项目。Problems
(先备份)。答案 3 :(得分:0)
转到首选项&gt; C / C ++&gt;语言映射&gt; ADD(源C文件并选择GNU C)对C ++执行相同的操作
答案 4 :(得分:0)
我有同样的问题。我已经设置了所有正确的包含路径,但在打开.c / .cpp或.h文件后,它会开始标记所有内容为&#34;未解析。&#34;
这对我有用......
转到:
偏好 - &gt; C / C ++ - &gt;分度
检查在编辑器中打开的索引源和头文件。
答案 5 :(得分:0)
我和许多人一样有同样的问题。
我按照AyberkÖzgür帖子中的步骤进行操作,这很有道理。虽然我还必须确保在所有三种语言下添加包括:GNU C,GNU C ++和Assembly。可能是因为我没有使用独立的工具链。
我起初只使用GNU C和GNU C ++语言。这让我仍然处理未解决的包含错误。直到我用汇编语言分配我的包含,我的错误才消失。
我不知道为什么eclipse只搜索我的项目中的Assembler包含。我也不知道这部分解决方案如何适用于更复杂的项目。
希望这有帮助。
答案 6 :(得分:0)
Eclipse CDT使用OpenCV库的情况与此类似。程序编译正确时,我收到了几条错误消息。我更改了&#34; window-&gt; preferences-&gt; Indexer&#34;中的索引器设置。 &#34;为索引器构建配置&#34;框到&#34;使用活动配置&#34;这解决了我的问题。
答案 7 :(得分:0)
我花了大约3小时的时间来对抗这个Eclipse NDK索引问题!...
使其有效的原因:确保您的Application.mk文件中指定了仅一个cpu架构。
否则NDK构建将不会生成.metadata / .plugins / com.android.ide.eclipse.ndk / * .pathInfo文件。此文件包含Project中的内置值 - &gt;属性 - &gt; C / C ++一般 - &gt;路径和符号 - &gt;包含(只是使.pathInfo文件无法解决问题)