GCC构建问题(#include_next limits.h)

时间:2009-05-16 08:01:26

标签: c++ linux gcc g++ gnu-make

当我尝试

$ make depend -f gcc.mak

我的Ubuntu机器上的中间件我得到了这个

/usr/include/../include/limits.h:125:26: error: no include path in which to search for limits.h

这是limits.h:125:

的内容
/* Get the compiler's limits.h, which defines almost all the ISO constants.

    We put this #include_next outside the double inclusion check because
    it should be possible to include this file more than once and still get
    the definitions from gcc's header.  */
#if defined __GNUC__ && !defined _GCC_LIMITS_H_
/* `_GCC_LIMITS_H_' is what GCC's file defines.  */
# include_next <limits.h>
#endif

我尝试过设置

$ export INCLUDE=/usr/lib/gcc/x86_64-linux-gnu/4.3/include-fixed/
$ export C_INCLUDE_PATH=/usr/lib/gcc/x86_64-linux-gnu/4.3/include-fixed/
$ export CPLUS_INCLUDE_PATH=/usr/lib/gcc/x86_64-linux-gnu/4.3/include-fixed/

(这是我在我的系统上找到另一个limits.h的地方)。我已经安装了libc6-dev,是不是它的limits.h被另一个包覆盖了?我需要另一个-dev包吗?或者是需要的环境变量;也许这可以用其他方式来规避?

6 个答案:

答案 0 :(得分:2)

我遇到了使用STLport 5.1.5进行编译的问题,但看起来修复的问题是STLport 5.2.0。 STLport Release Notes中记录了该问题。获得STLport 5.2.1的副本后,编译成功完成而没有打嗝。

答案 1 :(得分:2)

我在进行交叉编译时遇到过这个问题。当你执行'make depend'时Makefile将调用makedepend程序,如下所示:

MAKEDEPPROG=makedepend

makedepend仅搜索以/usr/include

开头的一些默认包含目录

由于#include_next指令意味着在搜索路径中包含下一个找到的命名包含文件的实例,如果找不到另一个,则会失败。

对我来说,解决方案是指示makedepend首先搜索我的交叉编译器包含目录。我这样做是通过更改MAKEDEPPROG赋值来包含-I指令:

MAKEDEPPROG=makedepend -I < path/to/cross-compiler/include-fixed >

我建议阅读有关makedepend程序的内容(之前我一无所知)。例如,对我来说,makedepend不会使用环境搜索路径并不明显。 -I指令将指定的搜索路径放在makedepend的默认路径之前。

答案 2 :(得分:1)

考虑使用#include_next <limits.h>(gcc扩展名)来强制gcc查看包含路径中的下一个limits.h(应该是工具集的副本)。

答案 3 :(得分:1)

这很可能是此问题:https://jira.apache.org/jira/browse/STDCXX-768。 对我来说,解决方法是添加编译器选项-I / usr / lib / gcc / x86_64-linux-gnu / 4.3 / include-fixed(此路径包含limits.h)。

答案 4 :(得分:0)

我不再完全记住决议,但它与一些缺失的包有关。在获得更多东西后,它对我有用。

答案 5 :(得分:0)

你需要的包是glibc。