【问题标题】:#include "existing file" fails: no such file (C)#include“现有文件”失败:没有这样的文件(C)
【发布时间】:2014-02-23 15:50:48
【问题描述】:

用 gcc 编译 C。 而

#include "/absolute/path/to/my/file" 

工作正常,

#include "../../relative/path/to/my/file" 

因“没有这样的文件或目录”而失败。仅当文件放置在项目目录之外时才会发生这种情况。文件具有读取权限。可能是什么原因?

【问题讨论】:

  • 包括确切的代码、构建命令和文件结构会给你更好的答案
  • 当移出工作目录时,它所在的目录是否可以从编译器使用的 INCLUDE 路径访问?如果没有,那么你有点得到你想要的。
  • 确保相对于调用gcc 命令的目录——这并不总是你调用make 的目录。

标签: c gcc include makefile


【解决方案1】:

使用格式时

#include "some_file.h"

默认情况下,预处理器会在与源文件相同的目录中查找,如果在该目录中找不到该文件,则会在头文件搜索路径中查找。

如果头文件与源文件不在同一目录下,也不在预处理器搜索路径的目录之一,则找不到。

可以编写相对路径或完整路径:

#include "../some_directory/some_file.h"

【讨论】:

    【解决方案2】:

    【讨论】:

      【解决方案3】:

      使用 gcc 和本地头文件时,您需要在构建命令中添加包含路径。

      mysource.c:

      #include "localfile.h" 
      

      构建命令:

      gcc -o program mysource.c 
      

      只要头文件与源(运行命令的位置)位于同一目录中,此方法就可以工作。如果您的头文件位于不同的目录中,您可以使用 -I 选项包含:

      gcc -I../headerdir -o hello.exe hello.c 
      

      或绝对路径:

      gcc -I/home/user/myprogra/headerdir -o hello.exe hello.c 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-13
        • 2021-05-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多