即使已设置包含路径,Eclipse 也找不到头文件管理器
Eclipse can't find header filers even though include paths have been set
在使用 GCC 的特定 Eclipse 环境中创建新的 C 项目时,我 运行 遇到了一个特殊的链接器问题:
Fatal error: my_header.h: No such file or directory.
我遇到这个问题是因为 "my_header.h" 位于子文件夹中。经过调查,我发现您需要在 GCC 包含路径(选项 -I
)中包含子文件夹。这是如何完成的似乎在不同的 Eclipse 实现之间有所不同,但它应该类似于
项目 -> 属性 -> C/C++ 构建 -> 设置 -> 编译器 -> 包含
其中 "compiler" 在不同的实现中可能有不同的名称,而 "includes" 可能被称为 "input" 或类似的名称。
应该有一个添加包含路径的选项(选项 -I
),您可以在其中设置相对于特定项目的路径,方法是单击 "Add" 图标,然后单击工作区按钮,然后select 目录。然后 Eclipse 生成一个路径,应该类似于
"${workspace_loc:/${ProjName}/app}"
对项目中的所有子文件夹(及其子文件夹)执行此操作。
但是尽管对相关文件夹进行了上述操作,我仍然收到 "no such file or directory" 错误。可能是什么问题?
(因为想把这个问题的解决方法分享给大家,所以才发这种问答方式)
此错误的原因是没有对 gcc 包含路径进行完整性检查。尽管如上所述给出了 Eclipse 的相对路径,Eclipse 仍将传递绝对路径到 gcc -I
.
假设您的项目位于如下路径:
C:\åäö\workspace\project
和位于
的子文件夹
C:\åäö\workspace\project\std
其中“åäö”是包含任何非标准 ASCII 字母的任何字符串。在此示例中,我使用了瑞典语,但您会在大多数语言(法语、德语、西班牙语等)中遇到此类非标准字母。
问题是 Eclipse 将完整路径而不是相对路径传递给 GCC,然后出现某种符号 table 错误。所以而不是得到预期的
-I"C:\åäö\workspace\project\std"
您可能会收到随机垃圾字母,例如:
-I"C:\@!#\workspace\project\std"
该路径没有意义并且包含路径未经过健全性检查,因此除非您详细阅读控制台输出,否则您不会得到有关此信息的诊断信息。相反,Eclipse 默默地假装它已将您的包含路径添加到它应该检查的路径列表中,即使它没有。
唯一的解决办法似乎是避免将项目放在包含非 ASCII 字母的路径下。这似乎是几个使用 GCC 的 Eclipse 实现中的错误。
在使用 GCC 的特定 Eclipse 环境中创建新的 C 项目时,我 运行 遇到了一个特殊的链接器问题:
Fatal error: my_header.h: No such file or directory.
我遇到这个问题是因为 "my_header.h" 位于子文件夹中。经过调查,我发现您需要在 GCC 包含路径(选项 -I
)中包含子文件夹。这是如何完成的似乎在不同的 Eclipse 实现之间有所不同,但它应该类似于
项目 -> 属性 -> C/C++ 构建 -> 设置 -> 编译器 -> 包含
其中 "compiler" 在不同的实现中可能有不同的名称,而 "includes" 可能被称为 "input" 或类似的名称。
应该有一个添加包含路径的选项(选项 -I
),您可以在其中设置相对于特定项目的路径,方法是单击 "Add" 图标,然后单击工作区按钮,然后select 目录。然后 Eclipse 生成一个路径,应该类似于
"${workspace_loc:/${ProjName}/app}"
对项目中的所有子文件夹(及其子文件夹)执行此操作。
但是尽管对相关文件夹进行了上述操作,我仍然收到 "no such file or directory" 错误。可能是什么问题?
(因为想把这个问题的解决方法分享给大家,所以才发这种问答方式)
此错误的原因是没有对 gcc 包含路径进行完整性检查。尽管如上所述给出了 Eclipse 的相对路径,Eclipse 仍将传递绝对路径到 gcc -I
.
假设您的项目位于如下路径:
C:\åäö\workspace\project
和位于
的子文件夹C:\åäö\workspace\project\std
其中“åäö”是包含任何非标准 ASCII 字母的任何字符串。在此示例中,我使用了瑞典语,但您会在大多数语言(法语、德语、西班牙语等)中遇到此类非标准字母。
问题是 Eclipse 将完整路径而不是相对路径传递给 GCC,然后出现某种符号 table 错误。所以而不是得到预期的
-I"C:\åäö\workspace\project\std"
您可能会收到随机垃圾字母,例如:
-I"C:\@!#\workspace\project\std"
该路径没有意义并且包含路径未经过健全性检查,因此除非您详细阅读控制台输出,否则您不会得到有关此信息的诊断信息。相反,Eclipse 默默地假装它已将您的包含路径添加到它应该检查的路径列表中,即使它没有。
唯一的解决办法似乎是避免将项目放在包含非 ASCII 字母的路径下。这似乎是几个使用 GCC 的 Eclipse 实现中的错误。