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

时间:2015-01-12 15:49:44

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

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

  

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

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

项目 - >属性 - > C / C ++ Build - >设置 - >编译器 - >包括

其中"编译器"在不同的实现中可能有不同的名称,"包括"可以被称为"输入"或类似的。

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

的路径

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

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

但是尽管对相关文件夹做了以上操作,我仍然得到了#34;没有这样的文件或目录"错误。可能是什么问题?


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

1 个答案:

答案 0 :(得分:5)

出现此错误的原因是没有对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默默地假装它已将include路径添加到它应检查的路径列表中,即使它没有。

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