【问题标题】:Eclipse can't find header filers even though include paths have been set即使设置了包含路径,Eclipse 也找不到头文件管理器
【发布时间】:2015-01-12 15:49:43
【问题描述】:

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

致命错误:my_header.h:没有这样的文件或目录。

我遇到了这个问题,因为“my_header.h”位于一个子文件夹中。经过调查,我发现您需要在GCC包含路径中包含子文件夹(选项-I)。这是如何完成的似乎在不同的 Eclipse 实现之间有所不同,但它应该类似于

项目 -> 属性 -> C/C++ 构建 -> 设置 -> 编译器 -> 包含

其中“编译器”在不同的实现中可能有不同的名称,“包含”可能称为“输入”或类似名称。

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

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

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

但尽管对相关文件夹进行了上述操作,我仍然收到“没有这样的文件或目录”错误。可能是什么问题?


(我发布这种问答风格是因为我想与其他人分享这个问题的解决方案)

【问题讨论】:

    标签: c++ c eclipse gcc include-path


    【解决方案1】:

    此错误的原因是没有对 gcc 包含路径进行完整性检查。尽管如上所述提供了 Eclipse 的相对路径,但 Eclipse 仍会将绝对路径传递给 gcc -I

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

    C:\åäö\workspace\project
    

    以及位于

    的子文件夹
    C:\åäö\workspace\project\std
    

    其中“åäö”是包含任何非标准 ASCII 字母的任何字符串。在此示例中,我使用了瑞典语,但您会在大多数语言(法语、德语、西班牙语等)中遇到此类非标准字母。

    问题在于 Eclipse 将完整路径而不是相对路径传递给 GCC,然后出现了某种符号表故障。所以而不是得到预期的

    -I"C:\åäö\workspace\project\std"
    

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

    -I"C:\@!#\workspace\project\std"
    

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

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

    【讨论】:

    • @alk 两个人花了两天时间排查故障……大约 32 小时。我希望通过在这里发帖来拯救其他人免受同样的问题。
    • 我很幸运,我的常用用户名来自甚至无法使用特殊字符的时代。因为现在我会坚持我的真名变音...
    • 在我的例子中,我在相对路径中使用了反斜杠,随后被解释为折线。使用 -verbose 检查 gcc 接收的参数。以防这对任何人都有帮助。
    猜你喜欢
    • 2018-01-19
    • 2015-01-02
    • 2018-10-21
    • 2015-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-16
    • 2019-04-17
    相关资源
    最近更新 更多