Проблема сборки GCC (#include_next limits.h)

Когда я пытаюсь

$ 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 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 header.  */
#if defined __GNUC__ && !defined _GCC_LIMITS_H_
/* `_GCC_LIMITS_H_' is what GCC 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/

(где я нашел еще один limit.h в моей системе). У меня уже установлен libc6-dev, может быть, его limit.h был перезаписан другим пакетом? Нужен ли мне другой пакет -dev? Или требуется переменная среды; возможно, это можно обойти иначе?

Ответ 1

пакет, который вам нужен, - glibc.

Ответ 2

Я столкнулся со своей проблемой с компиляцией с STLport 5.1.5, но похоже, что проблема исправлена: STLport 5.2.0. Эта проблема задокументирована в STLport Примечания к выпуску. Получив копию STLport 5.2.1, компиляция прошла успешно без икоты.

Ответ 3

Я столкнулся с этой проблемой, выполняя кросс-компиляцию. Когда вы выполняете "make depend", Makefile будет вызывать программу makedepend, как видно из этого назначения:

MAKEDEPPROG=makedepend

makedepend выполняет поиск только по умолчанию включенных каталогов, начиная с /usr/include

Поскольку директива #include_next означает включение следующего найденного экземпляра именованного файла include в путь поиска, это не удастся, если другой не найден.

Для меня решение заключалось в том, чтобы направить makedepend для поиска в моем кросс-компиляторе сначала включите каталоги. Я сделал это, изменив назначение MAKEDEPPROG, включив директиву -I:

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

Я предлагаю прочитать о программе makedepend (о которой я ничего не знал раньше). Например, для меня не было очевидно, что makedepend не будет использовать путь поиска среды. Директива -I ставит указанный путь поиска до того, как он будет изменен по умолчанию.

Ответ 4

Рассмотрим использование #include_next <limits.h> (расширение gcc), чтобы заставить gcc искать следующий найденный limits.h в include-пути (который должен быть копией набора инструментов).

Ответ 5

Скорее всего, это проблема: https://jira.apache.org/jira/browse/STDCXX-768. Обходной путь для меня заключался в добавлении опции компилятора -I/usr/lib/gcc/x86_64-linux-gnu/4.3/include-fixed (этот путь содержит limit.h).

Ответ 6

Я точно не помню разрешение, но это связано с отсутствующим пакетом. После apt-получения еще нескольких вещей, это сработало для меня.