Произошла ошибка компиляции gcc из исходного кода

Сейчас gcc и g++ на моем компьютере с Ubuntu 15.10 версии 5.2.1. Мне нужно установить v4.4 из них по некоторым причинам. Я скачал исходный код gcc4.4.7 и настроил это:

../configure \
    --disable-checking \
    --enable-languages=c,c++ \
    --enable-multiarch \
    --enable-shared \
    --enable-threads=posix \
    --program-suffix=4.4 \
    --with-gmp=/usr/local/lib \
    --with-mpc=/usr/local/lib \
    --with-mpfr=/usr/local/lib \
    --without-included-gettext \
    --with-system-zlib \
    --with-tune=generic \
    --prefix=$HOME/bin/android_build

Я получил make-файл и попытался сделать, но я получаю эти две ошибки:

../../gcc/toplev.c:536:1: error: redefinition of ‘floor_log2’
../../gcc/toplev.c:571:1: error: redefinition of ‘exact_log2’

Так как решить эту проблему? Благодарю.

3 ответа

Я пытался установить gcc 4.4.7тоже с новее gcc версия. Я видел те же ошибки, что и вы. Согласно этому сообщению об ошибке, проблема связана с флагом -fno-gn89-inline, который стал флагом по умолчанию для обработки встроенных функций на более новых gcc версии. По состоянию на gcc 4.3по умолчанию было -fgnu89-inline, Так что все, что вам нужно сделать, это установить -fgnu89-inline флаг при компиляции.

Я пробовал это с

CFLAGS='-fgnu89-inline -g -O2' CXXFLAGS='-fgnu89-inline -g -O2' ./configure
make

но я все еще получаю ту же ошибку. Я предполагаю, что флаги не передаются должным образом, но я не знаю. Тогда я попробовал нормальный

./configure

и изменил две строки в Makefile от

CC = gcc
CXX = g++

в

CC = gcc -fgnu89-inline
CXX = g++ -fgnu89-inline

При этом я больше не видел ошибок.

Однако я столкнулся с другими ошибками:

@itemx must follow @item

Они вызваны более новой версией texinfoтак что вы могли бы использовать старую версию texinfo, Может быть, вы могли бы также исправить их вручную, я попробовал это для одного случая, но я не знаю, что я делаю, поэтому я не пошел по этому пути.

Короче говоря, я думаю, вам лучше работать с виртуальной машиной или образом докера.

Пытаться../configure CFLAGS='-fgnu89-inline -g -O2' ...

У меня это сработало.

      /*                    //toplev.h 注释下面两个函数 Annotate the following two functions
extern inline int
floor_log2 (unsigned HOST_WIDE_INT x)
{
  return x ? HOST_BITS_PER_WIDE_INT - 1 - (int) CLZ_HWI (x) : -1;
}

extern inline int
exact_log2 (unsigned HOST_WIDE_INT x)
{
  return x == (x & -x) && x ? (int) CTZ_HWI (x) : -1;
}
*/
Другие вопросы по тегам