Не удается создать gcc больше с момента обновления до 11.10

5

В понедельник я обновился до Ubuntu 11.04 (моя первоначальная установка) до 11.10, и теперь я больше не могу строить gcc из исходного кода. Поскольку я забыл удалить пакет gcc перед обновлением, Ubuntu заменил мой компилятор 4.7.0 с его стабильной версией 4.6.1. Поэтому я попытался снова создать источники SVN, но это не удается. Я недавно попробовал его с версией SVN версии 180193.

Через некоторое время сборка завершится неудачно со следующим сообщением:

/home/raphael/devel/gcc/build/./gcc/xgcc -B/home/raphael/devel/gcc/build/./gcc/ -B/usr/i686-pc-linux-gnu/bin/ -B/usr/i686-pc-linux-gnu/lib/ -isystem /usr/i686-pc-linux-gnu/include -isystem /usr/i686-pc-linux-gnu/sys-include    -g -O2 -O2  -I. -I. -I../../src/gcc -I../../src/gcc/. -I../../src/gcc/../include -I../../src/gcc/../libdecnumber -I../../src/gcc/../libdecnumber/bid -I../libdecnumber -I../../src/gcc/../libgcc -g -O2 -DIN_GCC   -W -Wall -Wwrite-strings -Wcast-qual -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition  -isystem ./include  -fPIC -g -DHAVE_GTHR_DEFAULT -DIN_LIBGCC2 -fbuilding-libgcc -fno-stack-protector   -I. -I. -I../.././gcc -I../../../src/libgcc -I../../../src/libgcc/. -I../../../src/libgcc/../gcc -I../../../src/libgcc/../include -I../../../src/libgcc/config/libbid -DENABLE_DECIMAL_BID_FORMAT -DHAVE_CC_TLS  -DUSE_TLS -o _ashldi3.o -MT _ashldi3.o -MD -MP -MF _ashldi3.dep -DL_ashldi3 -c ../../../src/libgcc/../gcc/libgcc2.c \
    -fvisibility=hidden -DHIDE_EXPORTS
In file included from /usr/include/stdio.h:28:0,
             from ../../../src/libgcc/../gcc/tsystem.h:88,
             from ../../../src/libgcc/../gcc/libgcc2.c:29:
/usr/include/features.h:323:26: fatal error: bits/predefs.h: File or directory not found.

Я сопоставил его с:

~/devel/gcc/build$ ../src/configure --prefix=/usr --enable-languages=c++

И сделайте это с помощью

~/devel/gcc/build$ make -j4

Чтобы быть уверенным, я сделал rm -rf * в каталоге сборки, если в нем есть некоторые сломанные вещи. Однако не помогло.

Это предыстория. Я попытался исправить это и искал bits/predefs.h . Он находится внутри /usr/include/i386-linux-gnu . Я временно исправил проблему, выполнив

~/devel/gcc/build$ C_INCLUDE_PATH=/usr/include/i386-linux-gnu make -j4

Это временно, потому что теперь gcc жалуется, что не может найти crti.o .

Кого я могу найти в /usr/lib/i386-linux-gnu . Теперь i может также установить C_LIBRARY_PATH - на самом деле это не сработает - но я чувствую, что я сражаюсь с системой здесь. Кроме того, даже если это удастся, мой недавно созданный компилятор также не будет знать о i386-linux-gnu . Поэтому я должен был бы установить C_LIBRARY_PATH и C_INCLUDE_PATH перед каждой сборкой каждого проекта, который у меня есть. Я мог добавить его в мой .bashrc, но это еще больше увеличивает .

Итак, как мне сказать процесс сборки:

  • Что есть дополнительные include / lib каталоги, и
  • Чтобы он построил gcc, который тоже их уважает?

Изменить: Я забыл включить команду, которая вызывает указанное выше сообщение об ошибке. Также я могу подумать о другом решении: скопируйте материал из /usr/include/i386-linux-gnu в /usr/include (то же самое для /usr/lib/i386-linux-gnu to /usr/lib ). Но это тоже не так. Наконец, gcc 4.6.1 системы может скомпилировать другие приложения просто отлично, кроме моих, которые используют функции C ++ 11, не присутствующие в серии 4.6.

    
задан Raphael R. 19.10.2011 в 18:37
источник

4 ответа

2

Применить этот патч и настроить с помощью --enable-multiarch (не путать с multi lib ):

(Это заменяет этот ранний патч .)     

ответ дан ams 14.11.2011 в 12:16
источник
2

Еще несколько материалов по адресу:

Ссылка

Вместо использования всего скрипта ключевая часть выглядит следующим образом:

make FLAGS_FOR_TARGET="-B/usr/lib/i386-linux-gnu -I/usr/include/i386-linux-gnu"

Результат не является полностью чистым, потому что ему по-прежнему нужен сценарий оболочки после установки, чтобы выполнить его с помощью дополнительных дополнительных опций. Например, вот пример из статьи /usr/bin/gcc-4.7:

#!/bin/sh

exec /opt/gcc-4.7/bin/gcc-4.7 -B/usr/lib/i386-linux-gnu -I/usr/include/i386-linux-gnu "[email protected]"
    
ответ дан Earl 01.12.2011 в 05:43
1

Ubuntu 11.10 предоставляет многоадресную поддержку, что означает, что вы не должны помещать файлы библиотеки в /usr/lib , но /usr/lib/i386-linux-gnu (32-разрядный) или /usr/lib/x86_64-linux-gnu (64-разрядный).

Используйте что-то вроде:

CFLAGS=-I/usr/include/i386-linux-gnu ./configure [options]

Вероятно, вам также нужно указать LDFLAGS=-L/usr/lib/i386-linux-gnu .

Кроме того, ваши пути не выглядят красиво: /usr/i686-pc-linux-gnu/lib/ , вы можете использовать такие параметры, как --libdir , чтобы исправить его.

    
ответ дан Lekensteyn 19.10.2011 в 19:17
1

С вашего здания из SVN вы уверены, что ваше здание из той же версии? AKA, убедитесь, что проблема не вверх по течению: -)

    
ответ дан balloons 11.11.2011 в 18:45