Ошибка компиляции GCC 3.4.6 в Ubuntu 14.04

Я пытаюсь скомпилировать GCC 3.4.6 в Ubuntu 14.04 x64. У него уже есть более новая версия GCC-4.8.2.

Я побежал ./configure --prefix=/usr/local/gcc-3.4 а также make,

Я попал в несколько ошибок, из-за которых я мог найти решения при поиске.

Ошибка 1

Ошибка 2

В конце концов я попал в эту ошибку, которую я не мог найти решение.

../../gcc/unwind-dw2.c: In function `uw_frame_state_for':
../../gcc/unwind-dw2.c:1031: error: field `info' has incomplete type
make[2]: *** [libgcc/32/unwind-dw2.o] Error 1
make[2]: Leaving directory `/home/hp-11/Documents/gcc-3.4.6/build/gcc'
make[1]: *** [stmp-multilib] Error 2
make[1]: Leaving directory `/home/hp-11/Documents/gcc-3.4.6/build/gcc'
make: *** [all-gcc] Error 2

Кто-нибудь знает, как это исправить? Пожалуйста, дайте мне знать, если нужно больше деталей.

1 ответ

Решение

Это старая хорошо известная проблема, касающаяся siginfo и siginfo_t

Все, что вам нужно, это посмотреть на ваши источники GCC для всех мест, таких как

struct rt_sigframe {            \
  int sig;              \
  struct siginfo *pinfo;          \
  void *puc;              \
  struct siginfo info;            \
  struct ucontext uc;           \
} *rt_ = (CONTEXT)->cfa;          \
sc_ = (struct sigcontext *) &rt_->uc.uc_mcontext;   \

этот находится внутри gcc/config/i386/linux.h, но ваша арка может отличаться

И вручную заменить struct siginfo * в siginfo_t * а также struct siginfo в siginfo_t, что делает его новейшим POSIX-совместимым. В каждом объявлении rt_sigframe чаще всего встречается два таких места, включая ваше info поле проблемы.

Другие вопросы по тегам