6

我将 Eclipse Indigo 与 Android/NDK 混合项目一起使用。我添加了 C++ 特性,几乎一切正常。自动构建工作;也就是说,当我编辑一个文件时,ndk-build 被调用并成功完成 - 没有构建错误。鼠标悬停代码辅助工作(小窗口弹出有关该功能的信息)。如果我将光标放在包含行上并按 F3,则会打开一个相关的头文件(不是我根据我的配置所期望的头文件,而是一个相关的头文件 - 也许是一个线索?)。

如果我在 .cpp 文件中选择以下行,它将打开 $NDKROOT/platform/android-3/arch-arm/usr/include/ctype.h:

#include <ctype.h>

(isdigit 在此文件中定义)

但是,Eclipse 坚持 isdigit 没有定义。我已经阅读了许多帖子,暗示静态分析器或索引器应该受到指责,但我尝试了许多建议的解决方案都无济于事。

如果我添加如下一行,错误就会消失,并且该函数的鼠标悬停代码辅助工作:

extern int isdigit(int);

同样,这不是链接器错误或编译器错误 - ndk-build 完成时没有错误。这是eclipse里面的东西。谢谢参观!

编辑:我现在认为这是一个代码分析问题。更好的解决方案是编辑代码分析选项,使“无法解析函数”成为警告而不是错误。这样您就可以在“问题”视图中看到警告,但可以继续工作。如果函数真的丢失了,编译器会告诉你的!我还有一个新理论,即问题出在符号链接之后的代码分析器上,因为所有“缺失”的函数都在符号链接的包含文件中。希望对这个理论有任何意见。

4

5 回答 5

5

在花了几天时间解决此类问题后,我开发了以下处理问题的方法。

我希望它可以帮助您或其他人:

摘要:通常,您在eclipse中的问题是由于eclipse配置问题引起的。以下假设您的 C++ 代码可以使用ndk_buildor ndk_build.cmd(在 Windows 上)构建。

  • eclipse juno (4.2) 和 CDT 8.1 版没有乐趣。使用日食靛蓝 (3.7)

  • 通过查看“安装新软件”,确保您已安装并启用了 CDT for indigo(8.0X 版)。在某些下载中,它默认为已安装但未indigo 上启用。

  • 当您处理本机代码或本机代码的 android 配置时,请确保您处于 eclipse 中的 C++/C 视角,而不是java 视角。它具有欺骗性,但在 Java 透视图中只有一部分选项可用。如果您在执行“项目 > 属性”时将“C/C++ 通用”视为选项,那么您可以确定您是 C++/C 视角。

  • 通常的问题是 C/C++ 领域中的索引器认为没有错误时存在错误(例如,使用 ndk-build 构建工作正常,通常您甚至可以在控制台窗口中看到这一点)。这是由第一个选项卡上“项目 > 属性 > C/C++ 常规”的“路径和符号”部分中的错误路径引起的。

  • 要解决此问题,主要工具是右键单击项目,选择“索引”和“搜索未解决的包含”。这将告诉它找不到哪些文件 - 这些通常不是您在文件中带有小粉红色标记的文件。

  • 要找到正确的文件,请在您的 NDKROOT 目录(安装 NDK 的位置)中搜索。一个典型的添加是: ${NDKROOT}/platforms/android-9/arch-arm/usr/include或者你的android目标的正确的android-N。由于 android 的多个版本和 C++ 标准库的副本,NDK 中有许多标准包含目录的副本。

两大警告

  • 当您在 Properties > C/C++ General/Paths and Settings 上更改索引器配置时,eclipse 中的“未解决的包含”视图不会自动更新,因此请确保每次再次运行它。eclipse 中的大多数视图都正确执行此更新!

  • 此外,eclipse 编辑器中源代码视图中的红色/粉色小错误标记也不会自动更新。您必须以某种方式“触摸”该文件,因为它发现错误现在已修复。

于 2012-07-19T13:10:16.697 回答
2

I worked around this issue via the approach I suggested in my question and haven't been able to find a better way yet.

于 2012-06-25T22:43:16.740 回答
2

也许这会有所帮助:

  1. 转到项目 > 属性
  2. 导航到 C/C++ 构建 > 设置
  3. 转到 GCC C 链接器 > 其他设置
  4. 在链接器标志中添加以下内容:-lc
于 2012-09-03T12:14:33.807 回答
0

我在使用不同工具链的 Linux 上遇到了同样的问题。即使是最简单的 C++ 代码(如由 hello 向导创建的代码)也会有语法错误,而不会出现构建问题。正如 Thorbjorn Jemander 在另一篇文章中指出的那样,问题出在索引器中,可以通过取消选择“允许包含的启发式结果”选项来消除它。明确地:Winsow -> Preferences -> C/C++ -> Indexer -> 取消选择上述选项。

之后,您可能会看到在编辑器中打开文件并在编辑器页面中单击后突出显示的错误消失...

于 2012-08-07T12:50:23.563 回答
0

您是否尝试过重建索引器?(右键单击项目资源管理器中的项目 index->​​rebuild)有时这会解决问题......如果您从早期版本的 eclipse 升级,您的索引器设置可能会出现问题 - 您可能想尝试恢复索引器默认值(首选项c/c++ 索引器)...希望这会有所帮助——这个问题可能会“令人抓狂”(似乎经常发生)

于 2012-05-27T16:05:50.943 回答