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

Lun*_*din 4 c c++ eclipse gcc include-path

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

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

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

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

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

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

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

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

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


(我发布这个Q&A风格,因为我想与其他人分享这个问题的解决方案)

Lun*_*din 5

出现此错误的原因是没有对gcc包含路径进行健全性检查.尽管如上所述给出了Eclipse的相对路径,Eclipse仍然会传递一个绝对路径到gcc -I.

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

C:\åäö\workspace\project
Run Code Online (Sandbox Code Playgroud)

和子文件夹位于

C:\åäö\workspace\project\std
Run Code Online (Sandbox Code Playgroud)

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

问题是Eclipse传递了完整路径,而不是相对于GCC的路径,然后存在某种符号表事故.所以而不是得到预期

-I"C:\åäö\workspace\project\std"
Run Code Online (Sandbox Code Playgroud)

你可能会得到随机垃圾信件,例如:

-I"C:\@!#\workspace\project\std"
Run Code Online (Sandbox Code Playgroud)

该路径没有意义,并且包含路径未进行完整性检查,因此除非您详细阅读控制台输出,否则无法获得诊断信息.相反,Eclipse默默地假装它已将include路径添加到它应检查的路径列表中,即使它没有.

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

  • 你被Eclipes的无知偷了几个小时? (6认同)