【问题标题】:gcc prints no such header file when compile it from upper level foldergcc 从上层文件夹编译时不打印这样的头文件
【发布时间】:2020-01-30 00:23:26
【问题描述】:

我这里有这个命令:

gcc -MD -fno-builtin -nostdinc -fno-stack-protector -Os -g -m32 -I. -c -o boot1lib.o
boot1lib.c

如果我在boot1lib.oboot1lib.c 所在的文件夹中运行它,它运行良好。但是当我尝试从上层文件夹运行它时,即./boot/boot1/boot1lib.c

它将显示: ./boot/boot1/boot1lib.c:1:10: fatal error: boot1lib.h: No such file or directory #include <boot1lib.h>

如何修改参数来解决这个问题?我正在尝试在根文件夹中构建一个 makefile,这样我就不必每次尝试编译时都复制和粘贴命令。

【问题讨论】:

  • 参见gcc手册中-I参数的解释,并相应地改变它。你了解-I 参数的工作原理吗?
  • @SamVarshavchik 我试过-Iboot/boot1 也没有用
  • Using -Iboot/boot1 对我使用 Clang 有效,它旨在与 GCC 兼容。如果其他人无法使用 GCC 重现此问题,我怀疑您使用 -Iboot/boot1 的尝试有问题

标签: c gcc makefile


【解决方案1】:

使用 GCC,#include <file> 仅在配置的系统目录中查找文件,包括那些添加了开关的目录。 #include "file" 查看它所在的源文件的目录。

【讨论】:

  • 所以你建议我应该修改头文件而不是命令?
  • @TravisSu:除非boot1lib.h 打算安装在系统目录中,否则您应该将其包含在#include "boot1lib.h" 中,而不是#include <boot1lib.h>。这就是 GCC(通常是其他编译器)的设计方式,通常采用这种设计比反对它更好。
猜你喜欢
  • 2012-06-13
  • 2012-09-08
  • 1970-01-01
  • 2015-05-15
  • 2010-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多