Eclipse 找不到头文件管理器,即使已设置包含路径

Eclipse can't find header filers even though include paths have been set

本文关键字:设置 包含 路径 找不到 文件管理器 Eclipse      更新时间:2023-10-16

在使用GCC的特定Eclipse环境中创建一个新的C项目时,我遇到了一个特殊的链接器问题:

致命错误:my_header.h:没有此类文件或目录。

我遇到这个问题,因为"my_header.h"驻留在子文件夹中。经过调查,我发现您需要在 GCC 包含路径中包含子文件夹(选项 -I )。在不同的 Eclipse 实现之间,这样做的方式似乎有所不同,但它应该是这样的

项目 -> 属性 ->

C/C++ 生成

->设置 ->编译器 -> 包括

其中"编译器"在不同的实现中可能有不同的名称,而"include"可以称为"input"或类似名称。

应该有一个选项来添加包含路径(选项 -I ),您可以在其中设置相对于特定项目的路径,方法是单击"添加"图标,然后单击工作区按钮,然后选择目录。然后 Eclipse 生成一个路径,它应该看起来像

"${workspace_loc:/${ProjName}/app}"

对项目中的所有子文件夹(及其子文件夹)执行此操作。

但是,尽管对相关文件夹执行了上述操作,我仍然收到"没有此类文件或目录"错误。可能是什么问题?


(我发布此问答样式,因为我想与其他人分享此问题的解决方案)

此错误的原因是没有对 gcc 包含路径进行健全性检查。尽管如前所述给出了 Eclipse 的相对路径,但 Eclipse 仍将传递到 gcc -I 的绝对路径。

假设您的项目位于如下路径:

C:åäöworkspaceproject

和位于

C:åäöworkspaceprojectstd

其中"åäö"是包含任何非标准 ASCII 字母的任何字符串。在这个例子中,我使用了瑞典语,但你会在大多数语言(法语、德语、西班牙语等)中遇到这种非标准字母。

问题是 Eclipse 传递的是完整路径,而不是 GCC 的相对路径,然后出现了某种符号表事故。因此,而不是得到预期的

-I"C:åäöworkspaceprojectstd"

您可能会收到随机垃圾字母,例如:

-I"C:@!#workspaceprojectstd"

路径没有意义,并且包含路径未进行健全性检查,因此除非详细阅读控制台输出,否则不会收到任何诊断信息。相反,Eclipse 默默地假装它已将您的包含路径添加到它应该检查的路径列表中,即使它没有。

唯一的解决方案似乎是避免将项目放在包含非 ASCII 字母的路径下。这似乎是使用 GCC 的几个 Eclipse 实现中的一个错误。