【问题标题】:GCC build problem (#include_next limits.h)GCC 构建问题 (#include_next limits.h)
【发布时间】:2010-10-26 16:42:43
【问题描述】:

当我尝试时

$ make 依赖 -f gcc.mak

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

/usr/include/../include/limits.h:125:26: 错误:没有搜索limits.h的包含路径

这是limits.h:125周围的内容:

/* 获取编译器的limits.h,它定义了几乎所有的ISO 常量。 我们把这个#include_next 放在双重包含检查之外,因为 应该可以多次包含这个文件并且仍然得到 gcc 标题中的定义。 */ #if 定义 __GNUC__ && !defined _GCC_LIMITS_H_ /* `_GCC_LIMITS_H_' 是 GCC 文件定义的。 */ # include_next #万一

我试过设置

$ 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 包吗?或者是否需要环境变量;也许这可以通过其他方式规避?

【问题讨论】:

  • 这应该可以正常工作。在编译命令中添加“-v”会看到什么?
  • 我猜limits.h 丢失(或被覆盖)。 -v 让我 GNU Make 3.81 目标:x86_64-linux-gnu gcc 版本 4.3.3 (Ubuntu 4.3.3-5ubuntu4)
  • 你能找到的另一个limits.h是应该被include_next拉进来的。您可以将 -v 添加到执行失败编译的 gcc 命令行中,即 gcc -v -c foo.c 吗?其输出中有趣的部分是 #include <...> 搜索从此处开始:/usr/local/include /usr/lib/gcc/x86_64-linux-gnu/4.3.3/include /usr/lib/gcc/ x86_64-linux-gnu/4.3.3/include-fixed /usr/include 搜索列表结束。
  • 你可以试试export CPATH=$(env | grep _INC | cut -d= -f2 | paste -d: -s)export LIBRARY_PATH=$(env | grep _LIB | cut -d= -f2 | paste -d: -s)

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


【解决方案1】:

考虑使用#include_next &lt;limits.h&gt;(gcc 扩展)以强制gcc 查看包含路径(应该是工具集的副本)中找到的下一个limits.h

【讨论】:

  • 我没有任何其他(合理的)limits.h。我需要 GCC limits.h。 include-fixed 中的那个似乎...关闭。
【解决方案2】:

我不完全记得解决方案了,但它与一些丢失的包有关。在 apt-get 了更多东西之后,它对我有用。

【讨论】:

  • 最好什么也不说
  • @RafaelLima:可能对某些人来说;对我来说,发现我缺少软件包(而不是认为我的系统中配置错误)会更有用。
【解决方案3】:

你需要的包是glibc。

【讨论】:

  • 听起来不错。即使我没有验证,我也会将其标记为解决方案。
  • 我正在尝试为 android 编译(所以没有 glibc),我也收到了这个错误。找不到我应该包含的标题。
【解决方案4】:

我在使用 STLport 5.1.5 进行编译时遇到了问题,但看起来问题已解决的是 STLport 5.2.0。该问题记录在 STLport Release Notes 中。获得 STLport 5.2.1 的副本后,编译成功,没有出现任何问题。

【讨论】:

    【解决方案5】:

    我在进行交叉编译时遇到了这个问题。当您执行“makedepend”时,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 的默认路径之前。

    【讨论】:

    • 我应该把它放在哪里?
    【解决方案6】:

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

    【讨论】:

      猜你喜欢
      • 2017-11-09
      • 2011-02-09
      • 2013-06-02
      • 1970-01-01
      • 1970-01-01
      • 2010-09-23
      • 1970-01-01
      • 2010-12-14
      • 2011-11-26
      相关资源
      最近更新 更多