如何让 Eclipse CDT 使用正确的 Linux headers 并停止抛出语义错误?

How to get Eclipse CDT to use the correct Linux headers and stop throwing semantic errors?

围绕这个主题有许多不同的答案,但我认为我的问题可能更具体一些,因为 none 有效。

我正在使用 Eclipse (v3.8.1) 为嵌入式目标构建 C 应用程序。我使用 LTIB 构建目标映像,我已经能够确认 LTIB 提供的 GCC 工具链(用于飞思卡尔 i.MX 处理器)是正确的 - 我可以成功构建和部署 "Hello World" 应用程序到目标。

现在,我正尝试在 Eclipse 中为目标 包含一些 Linux headers 。因此,我在 Eclipse 中向 ${LTIB_LOC} = /home/user/ltib 添加了一个 VAR,并在看似可以想象的任何地方添加了包含文件目录 (在其他答案的帮助下).

${LTIB_LOC}/rpm/BUILD/linux-2.6.31/include

并且在源代码中,我添加了我需要的header:

#include <linux/types.h>
#include <linux/imx_types.h>

现在,问题是 two-fold。首先,常见的 header types.h 来自 built-in 主机目录(/usr/include/linux),而我想使用 LTIB 目录中的 picked-up。其次,Eclipse 发现扫描器无法找到自定义 i.MX header imx_types.h,所以我有持久语义 warnings/errors,即使编译器可以找到 headers 和项目构建。

如何摆脱 built-in 主机目录,以便我始终使用目标 Linux headers,以及如何摆脱令人难以置信的烦人的语义错误?

您需要配置内置编译器设置提供程序才能找到正确的工具链。

前往 Project Properties | C/C++ General | Providers。 Select [Your Toolchain] Built-in Compiler Settings,并在 Command to get compiler specs 中,将 ${COMMAND} 替换为交叉编译器的路径。

这应该 CDT 停止获取系统默认工具链的内置包含,并开始获取交叉编译器工具链的内置包含。

(是的,用明确的路径替换 ${COMMAND} 是 hacky。 正确的 方法来做到这一点,至少在设计这个系统的开发人员的头脑中, 是让交叉编译器的开发人员分发一个 Eclipse 插件,该插件定义其 own [Cross Compiler Name] Built-in Compiler Settings 提供程序,它知道编译器可执行文件的位置(即 ${COMMAND}是正确的开始),并使用它而不是默认的内置设置提供程序。我假设您手边没有这样的 Eclipse 插件。)