Я пытаюсь скомпилировать g ++ 4.7.1 из исходного кода на Ubuntu 12.04 32 бит.
На данный момент я точно сделал это: https://askubuntu.com/questions/168947/how-to-upgrade-g-to-4-7-1
За исключением непосредственно перед компиляцией g ++ 4.7.1, он просит меня «сбросить LIBRARY_PATH» (так что я сделал это).
Итак, компиляция начинается, и через некоторое время у меня появляется следующее сообщение об ошибке:
In file included from ../.././gcc/c-lang.c:24:0:
../.././gcc/system.h:499:20: erreur: conflicting types for ‘strsignal’
/usr/include/string.h:566:14: note: previous declaration of ‘strsignal’ was here
In file included from ./tm.h:19:0,
from ../.././gcc/c-lang.c:26:
./options.h:3738:2: erreur: #error too many masks for ix86_isa_flags
In file included from ../.././gcc/input.h:25:0,
from ../.././gcc/tree.h:27,
from ../.././gcc/c-lang.c:27:
../.././gcc/../libcpp/include/line-map.h:208:38: erreur: ‘CHAR_BIT’ undeclared here (not in a function)
../.././gcc/../libcpp/include/line-map.h:208:3: erreur: bit-field ‘reason’ width not an integer constant
../.././gcc/../libcpp/include/line-map.h:208:3: attention : ‘reason’ is narrower than values of its type [enabled by default]
In file included from ../.././gcc/tree.h:32:0,
from ../.././gcc/c-lang.c:27:
../.././gcc/hwint.h:17:39: erreur: division par zéro dans #if
../.././gcc/hwint.h:17:39: erreur: division par zéro dans #if
../.././gcc/hwint.h:17:39: erreur: division par zéro dans #if
../.././gcc/hwint.h:17:39: erreur: division par zéro dans #if
../.././gcc/hwint.h:17:39: erreur: division par zéro dans #if
../.././gcc/hwint.h:17:39: erreur: division par zéro dans #if
../.././gcc/hwint.h:17:39: erreur: division par zéro dans #if
../.././gcc/hwint.h:17:39: erreur: division par zéro dans #if
../.././gcc/hwint.h:17:39: erreur: division par zéro dans #if
../.././gcc/hwint.h:17:39: erreur: division par zéro dans #if
../.././gcc/hwint.h:17:39: erreur: division par zéro dans #if
../.././gcc/hwint.h:17:39: erreur: division par zéro dans #if
../.././gcc/real.h:105:9: erreur: #error "REAL_WIDTH > 6 not supported"In file included from ../.././gcc/c-family/c-common.h:26:0,
from ../.././gcc/c-tree.h:25,
from ../.././gcc/c-lang.c:28:
../.././gcc/../libcpp/include/cpplib.h:225:3: erreur: bit-field ‘type’ width not an integer constant
../.././gcc/../libcpp/include/cpplib.h:225:3: attention : ‘type’ is narrower than values of its type [enabled by default]
../.././gcc/../libcpp/include/cpplib.h:267:3: erreur: #error "Cannot find a least-32-bit signed integer type"../.././gcc/../libcpp/include/cpplib.h:269:35: erreur: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘cppchar_t’
../.././gcc/../libcpp/include/cpplib.h:270:1: erreur: unknown type name ‘CPPCHAR_SIGNED_T’
../.././gcc/../libcpp/include/cpplib.h:768:1: erreur: unknown type name ‘cppchar_t’
../.././gcc/../libcpp/include/cpplib.h:779:1: erreur: unknown type name ‘cppchar_t’
../.././gcc/../libcpp/include/cpplib.h:779:58: erreur: unknown type name ‘cppchar_t’
../.././gcc/../libcpp/include/cpplib.h:954:1: erreur: unknown type name ‘cppchar_t’
(извините, некоторые сообщения об ошибках на французском: erreur -> error
а также division par zéro dans #if -> division by zero in #if
).
В чем проблема и как ее решить?
(другой маленький вопрос: в чем разница между ./configure
а также ./configure -v
?)
РЕДАКТИРОВАТЬ: строки strsignal в system.h
/* If the system doesn't provide strsignal, we get it defined in
libiberty but no declaration is supplied. */
#if !defined (HAVE_STRSIGNAL) \
|| (defined (HAVE_DECL_STRSIGNAL) && !HAVE_DECL_STRSIGNAL)
# ifndef strsignal
extern const char *strsignal (int);
# endif
#endif
У меня такая же проблема. В моем случае я решил эту проблему, сбросив переменные bash CPATH, LIBRARY_PATH и C_INCLUDE_PATH. После этого сборка прошла нормально.
я использовал
unset LIBRARY_PATH CPATH C_INCLUDE_PATH PKG_CONFIG_PATH CPLUS_INCLUDE_PATH INCLUDE
Поскольку у меня нет доступа с правами root на этом компьютере, и поэтому я добавил многие из этих переменных.
Другие решения не работали для меня, потому что я использую эти переменные env, чтобы указать gcc на некоторые из его зависимостей. Также unset
Ting Variit не звучит как очень точное решение 🙂
Оказывается, проблема в том, что у меня был какой-то трейлинг :
в моих объявлениях env vars, вот так:
$ export LIBRARY_PATH=/foo/bar:$LIBRARY_PATH
$ echo $LIBRARY_PATH
/foo/bar:
Результатом является то, что LIBRARY_PATH
всегда будет также включать текущий каталог. Правильная установка переменных env без трейлинга :
, решил проблему.