在使用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样式,因为我想与其他人分享此问题的解决方案)
答案 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实现中的一个错误。