Не может создавать gcc больше начиная с обновления 11,10

В понедельник я обновил до из 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.

У меня есть cofigured это с:

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

И сделайте его с:

~/devel/gcc/build$ make -j4

Только, чтобы быть уверенным, я сделал a 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. Теперь я мог также установить C_LIBRARY_PATH - на самом деле это не работает - но я чувствую, что борюсь с системой здесь. Кроме того, даже если бы это успешно выполняется, мой недавно созданный компилятор также не знал бы о i386-linux-gnu материал. Таким образом, я должен был бы установить C_LIBRARY_PATH и C_INCLUDE_PATH перед каждой сборкой каждого проекта я имею. Я мог добавить его к своему .bashrc, но это ниспровергает систему еще больше.

Так, как делают я говорю процесс сборки:

  • То, что там дополнительны, включают/освобождают каталоги, и
  • То, что это должно создать gcc, который уважает их также?

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

5
задан 11 November 2011 в 00:56

4 ответа

Так как ваше здание из SVN, вы уверены, что ваше здание из той же ревизии? АКА, убедитесь, что проблема не в восходящем потоке: -)

0
ответ дан 11 November 2011 в 00:56

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

http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=644986

Вместо весь сценарий, ключевая часть выглядит так:

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 "$@"
0
ответ дан 11 November 2011 в 00:56

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

(что заменяет этот более ранний патч .) [ 115]

0
ответ дан 11 November 2011 в 00:56

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, чтобы исправить это.

0
ответ дан 11 November 2011 в 00:56

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

Похожие вопросы: