gcc не может найти биты/predefs.h на i686

Итак, я переключился с Ubuntu 12.04 64-бит на 32-бит и установил build-essential.

Затем я скомпилировал и установил GMP-5.0.5, MPFR-3.1.1, MPC-1.0, ISL-0.10 и CLOOG-0.17.0. Я проверил копию основного транка gcc и попытался собрать его с помощью следующей строки конфигурации (из отдельного каталога):

../svnsrc/configure --prefix=/usr/GCC/svn --enable-__cxa_atexit --with-plugin-ld=/usr/bin/ld.gold --enable-threads=posix --enable-werror --enable-build-with-cxx --with-gmp=/usr/GCC/prereq/svn --with-mpfr=/usr/GCC/prereq/svn --with-mpc=/usr/GCC/prereq/svn --with-isl=/usr/GCC/prereq/svn --with-cloog=/usr/GCC/prereq/svn --enable-languages=c,c++

Настройка прошла нормально, поэтому я запустил make && make check. Некоторое время все работало нормально, но затем произошел сбой со следующей ошибкой:

/home/matt/GCC/svnbuild/./gcc/xgcc -B/home/matt/GCC/svnbuild/./gcc/ -B/usr/GCC/svn/i686-pc-linux-gnu/bin/ -B/usr/GCC/svn/i686-pc-linux-gnu/lib/ -isystem /usr/GCC/svn/i686-pc-linux-gnu/include -isystem /usr/GCC/svn/i686-pc-linux-gnu/sys-include    -g -O2 -O2  -g -O2 -DIN_GCC   -W -Wall -Wwrite-strings -Wcast-qual -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition  -isystem ./include   -fpic -mlong-double-80 -g -DIN_LIBGCC2 -fbuilding-libgcc -fno-stack-protector   -fpic -mlong-double-80 -I. -I. -I../.././gcc -I../../../svnsrc/libgcc -I../../../svnsrc/libgcc/. -I../../../svnsrc/libgcc/../gcc -I../../../svnsrc/libgcc/../include -I../../../svnsrc/libgcc/config/libbid -DENABLE_DECIMAL_BID_FORMAT -DHAVE_CC_TLS  -DUSE_TLS -o _muldi3.o -MT _muldi3.o -MD -MP -MF _muldi3.dep -DL_muldi3 -c ../../../svnsrc/libgcc/libgcc2.c -fvisibility=hidden -DHIDE_EXPORTS
In file included from /usr/include/stdio.h:28:0,
                 from ../../../svnsrc/libgcc/../gcc/tsystem.h:88,
                 from ../../../svnsrc/libgcc/libgcc2.c:29:
/usr/include/features.h:324:26: fatal error: bits/predefs.h: No such file or directory
 #include <bits/predefs.h>
                          ^
compilation terminated.
make[3]: *** [_muldi3.o] Error 1
make[3]: Leaving directory `/home/matt/GCC/svnbuild/i686-pc-linux-gnu/libgcc

Я осмотрелся, но все, что я, кажется, нашел, это то, что эта ошибка была вызвана на x86_64, не установкой gcc-multilib, потому что Ubuntu и Debian используют систему mutiarch, разделяя библиотеки. Хорошо, хорошо... но я использую i686, так зачем мне 64-битные библиотеки? Любая помощь будет оценена по достоинству. Спасибо.


person mmoran    schedule 25.09.2012    source источник


Ответы (2)


Попробуйте сделать

sudo apt-get install gcc-multilib

Я не думаю, что установка 32-битной системы изменит архитектуру вашего компьютера, потому что ваш компьютер всегда будет 64-битной машиной. Установка 64-битной версии Ubuntu должна только улучшить многоядерную производительность. Поскольку ваш компьютер по-прежнему 64-битный, вам, вероятно, понадобится компилятор C, который будет компилироваться на 64-битных машинах. Следовательно, gcc-multilib. Я думаю.

person kdazzle    schedule 27.09.2012
comment
Я так и сделал, и пока он избавился от ошибки, я получил новую про gnu/stubs-32.h, которая находится в libc6-dev. Я просто собираюсь вернуться к 64-битной версии 12.04. Спасибо! Принятие, потому что это избавилось от ошибки. - person mmoran; 29.09.2012
comment
Хм, так вы уже пробовали делать то, что это предлагает? stackoverflow .com/questions/7412548/ - person kdazzle; 30.09.2012
comment
как 64-разрядная версия связана с многопроцессорностью (использование ядра)? - person Janus Troelsen; 28.01.2013
comment
Основное изменение с 32-битной на 64-битную заключается в том, сколько памяти может использовать система, а не в многопроцессорности. 32-разрядные системы поддерживают около 2 ГБ памяти, тогда как 64-разрядные системы могут поддерживать до 16 экзабайт (хотя технически 64-разрядные машины Intel и AMD адресуют только 48-разрядные адреса для максимального объема 256 ТБ, что все еще достаточно хорошо. . сейчас). - person Dan Albert; 05.07.2013
comment
Обратите внимание, что я получил эту ошибку и в 64-битной системе. Так что не думайте, что это проблема 32, 64-битной версии. Но установка этого пакета действительно решает проблему. - person Calmarius; 01.08.2013
comment
@DanAlbert: 32-разрядные системы поддерживают модель виртуальной машины на основе значения макроса PAGE_OFFSET, определенного в ядре (настраивается только во время сборки ядра (обычно через CONFIG_VM_SPLIT)). Типичным значением по умолчанию для 32-разрядных систем в Linux является разделение виртуальных машин 3:1, подразумевающее 3 ГБ виртуальной памяти пользовательского режима и 1 ГБ виртуальной памяти режима ядра. Может быть 2:2, может быть 1:3. - person kaiwan; 24.03.2014
comment
Как насчет Ubuntu 10.04? - person DU Jiaen; 03.08.2016

трюк gcc-multilib у меня не сработал. Вместо этого установка этого в среде сборки помогла:

C_INCLUDE_PATH=/usr/include/$(gcc -print-multiarch)
person zultron    schedule 12.08.2013
comment
Поскольку gcc-multilib недоступен на Cubian, это решает проблему для меня. -помните экспорт C_INCLUDE_PATH= ... кстати. - person ; 04.05.2015
comment
Это сработало и для меня. gcc-multilib также недоступен на Raspbian. - person William T Froggard; 27.09.2015