GCC可以';即使搜索目录正确,也无法找到标题

GCC可以';即使搜索目录正确,也无法找到标题,c,gcc,include,C,Gcc,Include,GCC再一次让我觉得自己像个傻瓜,因为我在最简单的事情上遇到了麻烦。我包含了一个标题: #include "PDL.h" 然后,我尝试编译: arm-none-linux-gnueabi-gcc -I/cygdrive/c/PalmPDK/include -I../lua-5.1.4/lua-webos/include -O2 -Wall -shared -nostdlib -mcpu=arm1136jf-s -mfpu=vfp -mfloat-abi=softfp -lpdl 但它说: P

GCC再一次让我觉得自己像个傻瓜,因为我在最简单的事情上遇到了麻烦。我包含了一个标题:

#include "PDL.h"
然后,我尝试编译:

arm-none-linux-gnueabi-gcc -I/cygdrive/c/PalmPDK/include -I../lua-5.1.4/lua-webos/include -O2 -Wall -shared -nostdlib -mcpu=arm1136jf-s -mfpu=vfp -mfloat-abi=softfp -lpdl
但它说:

PDL.h:没有这样的文件或目录

我可以切换到上面指定的include目录中,看到PDL.h在那里,但是GCC没有看到它。

include“file.h”语法在当前目录中查找,然后在头文件的默认include目录中查找。相反,使用
#include
语法来选择命令行上指定的目录

如果要使用带引号的文件名语法,请使用语法
-iqotefolder\u PATH


编辑:根据您对makefile的评论,确保您已在makefile中设置(和
export
)了
SHELL
变量。在Windows下运行Cygwin时,可以将其设置为cmd.exe或Cygwin bash(如果包含每个文件的完整路径,效果最好)。在
SHELL
变量中列出的任何环境都将用于执行makefile中的命令。您可以使用任何希望使用的shell,只需确保指定一个或另一个,以便确保为给定shell使用正确的路径样式。为了更好地度量,还可以使用相同的值设置(和导出)MAKESHELL变量。

如果路径中有空格,则需要对其进行转义,或者用双引号将路径括起来。

假设您在Linux机器上,或者在某种Unix上:

ls -l /
ls -l /cygdrive
ls -l /cygdrive/c
ls -l /cygdrive/c/PalmPDK
ls -l /cygdrive/c/PalmPDK/include

您可能会在上面列出的某个命令的结果中找到答案。

/cygdrive是cygwin特有的,因此如果gcc未编译为使用cygwin unix仿真层,它将不会对其进行搜索。尝试使用
-IC:/PalmPDK/include

我尝试使用括号,但没有改变输出。我还使用
-I
指定了其他搜索目录,其标题包含引号,并且工作正常。这只发生在
/cygdrive/c/PalmPDK/include
中的头上。这会让我相信这是一个打字错误或什么的,但我可以切换到该目录并查看PDL.h是否存在。“file.h”必须使用该算法,如果在.gcc搜索“…”包含在-I目录之前找不到该文件。即使使用-I-all-I选项,也会搜索本地包含项。你是在谈论这个交叉编译器的一些奇怪的和特定的东西吗?@Owen-重新阅读gcc文档,我发现你是对的。我认为我使用的是一个不一致的gcc实现(这将解释其他一些事情…)。我应该解决这个问题。路径中没有空格(我的问题中包括了空格)。您是否仔细检查了文件名和目录名的大小写?(gcc主要是在Unix上开发的,带有区分大小写的文件,而您在windows上使用的是不区分大小写的文件,这可能有些问题)是的,大小写完全相同。请尝试使用gcc的verbose选项,该选项将为您提供搜索的路径。您能告诉我们您正在使用的其他gcc选项吗?其中一个可能正在重写所示的
-I
语句。您的gcc来自哪里/cygdrive是cygwin特有的东西,所以如果gcc不是在cygwin环境中编译的,它就不会搜索它。也许可以尝试使用C:/PalmPDK/includeAll成功执行这些命令,最后一个命令显示PDL.h。就像我说的,输入错误是有道理的,但我已经检查了又检查了。