【问题标题】:GCC finding wrong includeGCC 发现错误的包括
【发布时间】:2012-10-02 23:25:46
【问题描述】:

我正在尝试构建一个依赖于 Apache httpd 的项目。不幸的是,我已经并且需要将 httpd 源放在 /usr/includes 中,而该项目在 $(project)/common/includes 中为 httpd(不同版本!)提供了自己的标头。我希望 gcc 从项目目录而不是 /usr/includes 中获取头文件,但恐怕即使我成功了,我也可能会错过 /usr/includes 中的其他重要头文件。

关于如何做到这一点的任何想法?

编辑:Make 文件的相关部分如下所示:

CFLAGS = -Wall -O3 -fPIC -fomit-frame-pointer -I vm -D_GNU_SOURCE -I libs/common -D_64BITS
EXTFLAGS = -pthread
MAKESO = $(CC) -shared #-WBsymbolic

# later ...

all: createbin libneko neko std compiler libs

neko: bin/neko

# later ...

bin/neko: $(VM_OBJECTS)
    ${CC} ${CFLAGS} ${EXTFLAGS} -o $@ ${VM_OBJECTS} ${NEKOVM_FLAGS}
    strip bin/neko

在执行这个“食谱”时,我得到了:

In file included from /usr/include/httpd/httpd.h:43:0,
                 from mod_neko.h:20,
                 from mod_neko.c:17:
/usr/include/httpd/ap_config.h:25:17: fatal error: apr.h: No such file or directory

但它不应该使用 /usr/include/httpd/httpd.h 因为有<project> /libs/include/apache2/httpd.h

【问题讨论】:

  • CFLAGS=-I<project>/common/includes?
  • (另外值得指出的是,头文件只针对编译器;链接器不使用它们。)
  • 这将取决于一些事情,CFLAGS 是否在 Makefile 中被覆盖,他是否使用 Makefiles,如果它们被覆盖,它们是否尊重 shell-set CFLAGS 以及以何种顺序.. 需要更多信息可以准确指出。
  • 从您的帖子中不清楚必要的标题在哪里。

标签: c gcc include-path


【解决方案1】:

这里是gcc includes search path的信息

GCC 在几个不同的地方寻找标题。在一个普通的 Unix 系统上,如果你不另外指示它,它会寻找带有 #include in: 的请求头:

 /usr/local/include
 libdir/gcc/target/version/include
 /usr/target/include
 /usr/include

您可以使用 -Idir 命令行选项添加到此列表中。 以从左到右的顺序在默认目录之前搜索所有由 -I 命名的目录

【讨论】:

  • @wvxvw 我认为您需要将 -I $(project)/common/includes 添加到您的 CFLAGS 中,它将在 默认目录之前进行搜索
  • @wvxvw 和上面的 cmets -I$(project)/libs/include/apache2 应该被添加
  • @wvxvw 我不相信魔法。但是,如果您已阅读我的链接“您可以使用 -nostdinc 选项阻止 GCC 搜索任何默认目录”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-11
  • 2019-03-30
  • 1970-01-01
  • 2012-04-12
  • 2016-09-05
  • 2012-04-11
  • 2011-08-27
相关资源
最近更新 更多