Как установить GCC по частям с GMP, MPFR, MPC, ELF, без разделяемых библиотек?
Как установить GCC (сборник компиляторов GNU) по частям, используя текущую версию,
используя правильные версии зависимостей, не используя диспетчер пакетов (например, yum, rpm, apt, dpkg) и не используя разделяемые библиотеки?
Типичные разработчики, скорее всего, захотят установить GCC обычным способом, используйте ваш менеджер пакетов (yum, rpm, apt, dpkg, port, brew и т.д.) или следуйте инструкциям здесь (http://gcc.gnu.org/wiki/InstallingGCC).
Мой вопрос - как установить GCC по частям, без разделяемых библиотек.
- Я хочу полностью независимый GCC, который можно перемещать по моей системе без использования каких-либо разделяемых библиотек и без создания разделяемых библиотек.
- Это то, что GCC называет "трудным способом", и это не рекомендуется для обычных пользователей.
GCC зависит от:
- GMP: библиотека многоточечной арифметики GNU
- MPFR: GNU Многоточечная библиотека округления с плавающей запятой
- MPC: библиотека многоточечной библиотеки GNU
- ELF: библиотека исполняемых и связных форматов
- PPL: Библиотека Parma Polyhedra (необязательно, для оптимизации памяти)
Ответы
Ответ 1
Простой способ
Если вы типичный разработчик, вы можете установить простой способ, используя инструкции в http://gcc.gnu.org/wiki/InstallingGCC или менеджер системных пакетов, например
apt install gcc # for Debian, Ubuntu, etc.
yum install gcc # for RedHat, CentOS, etc.
brew install gcc # for Mac OS X
Жесткий путь
GCC говорит, что ответ здесь "трудный путь", потому что он строит все по частям и не использует разделяемые библиотеки.
Инфраструктура GCC
Получить инфраструктуру GCC:
ftp://gcc.gnu.org/pub/gcc/infrastructure/
Поместите загрузки в каталог temp (вы можете использовать любой желаемый каталог).
/opt/downloads
Создайте инфраструктуру в каталоге temp, который отличается от каталога загрузки или его подкаталогов:
/tmp/gcc
Настройте инфраструктуру с помощью статических библиотек, например:
./configure --disable-shared --enable-static --prefix=/tmp/gcc
Флаг --disable-shared может стоить более пристального взгляда в зависимости от ваших потребностей. Я использую --disable-shared, потому что я создаю только статический код, и я хочу убедиться, что я не создаю никакого общего кода. Мне нужно легко перемещать полученный GCC на мои диски, поэтому мне нужен весь статический код, и я не хочу использовать общий код. Если вы предпочитаете общий код, опустите флаг --disable-shared.
Версия
При запуске любой из команд в этом ответе обязательно обновите команды, чтобы использовать текущий номер версии GCC, соответствующий вашим потребностям. Команды в этом ответе для GCC 4.6.2.
Обратите внимание, что в документации GCC говорится: "Несмотря на то, что обычно имеется достаточно новая версия необходимых инструментов, требования к библиотеке, как правило, более строгие. В некоторых случаях могут работать более новые версии, но более безопасно использовать точные версии, документированные".
GMP
GMP - это многоарифметическая библиотека с многоточечной точностью GNU.
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/gmp-4.3.2.tar.bz2
bunzip2 gmp-4.3.2.tar.bz2
tar xvf gmp-4.3.2.tar
cd gmp-4.3.2
./configure --disable-shared --enable-static --prefix=/tmp/gcc
make && make check && make install
MPFR
MPFR - это библиотека округления с плавающей запятой с многоточечной точкой с плавающей запятой. Это зависит от GMP.
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/mpfr-2.4.2.tar.bz2
bunzip2 mpfr-2.4.2.tar.bz2
tar xvf mpfr-2.4.2.tar
cd mpfr-2.4.2
./configure --disable-shared --enable-static --prefix=/tmp/gcc --with-gmp=/tmp/gcc
make && make check && make install
MPC
MPC - это библиотека многоточечной библиотеки GNU. Это зависит от GMP и MPFR.
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/mpc-0.8.1.tar.gz
tar zxvf mpc-0.8.1.tar.gz
cd mpc-0.8.1
./configure --disable-shared --enable-static --prefix=/tmp/gcc --with-gmp=/tmp/gcc --with-mpfr=/tmp/gcc
make && make check && make install
ELF
ELF обозначает исполняемый и связанный формат. Эта библиотека обеспечивает независимый от архитектуры размер и поддержку endian.
wget http://www.mr511.de/software/libelf-0.8.13.tar.gz
tar zxvf libelf-0.8.13.tar.gz
cd libelf-0.8.13
./configure --disable-shared --enable-static --prefix=/tmp/gcc
make && make check && make install
НКА
GCC - это сборник компиляторов GNU. Это зависит от GMP, MPFR, MPC и ELF.
wget http://www.netgull.com/gcc/releases/gcc-4.6.2/gcc-4.6.2.tar.gz
tar zxvf gcc-4.6.2.tar.gz
Создайте gcc в каталоге с нуля на
такой же точка крепления. (Построение внутри /tmp вызовет проблемы с перекрестным компиляцией узла)
mkdir -p /opt/downloads/gcc-4.6.2-scratch
cd /opt/downloads/gcc-4.6.2-scratch
Команда configure и ее флаги должны находиться в одной командной строке (это сообщение показывает их на отдельных строках только из-за ширины веб-страницы).
Примечание. Мы используем полный путь для настройки и не устанавливаем переменные среды пути библиотеки. Мы решили отключить загрузку и отключить разделяемые библиотеки, потому что мы не хотим их (типичным пользователям может понадобиться и то и другое), и использовать потоки posix и флаги, которые являются значениями по умолчанию, потому что мы хотим их (обычные пользователи могут захотеть использовать другие потоки или пропускать флаги по умолчанию). YMMV и читать о флагах здесь
/opt/downloads/gcc-4.6.2/configure
--disable-shared
--disable-bootstrap
--disable-libstdcxx-pch
--enable-languages=all
--enable-libgomp
--enable-lto
--enable-threads=posix
--enable-tls
--with-gmp=/tmp/gcc
--with-mpfr=/tmp/gcc
--with-mpc=/tmp/gcc
--with-libelf=/tmp/gcc
--with-fpmath=sse
make && make install
Эта страница отлично подходит для информации о настройке GCC, ее построения, различных флагов и т.д.:
http://www.acsu.buffalo.edu/~charngda/cc_build.html
Обновление
Библиотеки ppl могут использоваться для оптимизации памяти: см. bugseng.com/products/ppl/Download (спасибо Paul в комментариях)
Вы можете запустить. /contrib/download _prerequisites из исходного каталога gcc. (Благодаря N7P на reddit)
Ответ 2
Принятый ответ делает его далеко более сложным, чем необходимо, и не подходит для всех версий. Создание GCC с --disable-shared
обычно является очень плохим. Подробнее см. http://gcc.gnu.org/wiki/InstallingGCC.
Процесс весь не должен быть сложнее этого (заменяя 4.6.2 версией, которую вы хотите построить):
tar xzf gcc-4.6.2.tar.gz
cd gcc-4.6.2
./contrib/download_prerequisites
cd ..
mkdir objdir
cd objdir
$PWD/../gcc-4.6.2/configure --prefix=$HOME/GCC-4.6.2
make
make install
(Но, пожалуйста, прочитайте ссылку в любом случае, она содержит полезную информацию.)
По-видимому, у некоторых людей на Ubuntu есть тонны дерьма, установленные в их среде, которые мешают процессу сборки GCC, и им нужно сначала удалить это:
unset LIBRARY_PATH CPATH C_INCLUDE_PATH PKG_CONFIG_PATH CPLUS_INCLUDE_PATH INCLUDE LD_LIBRARY_PATH
Ответ 3
Я работаю над кластером. К интернету подключен только мастер node. Программное обеспечение на узлах устарело и вообще не поддерживается. У меня нет доступа root. У меня есть два варианта:
- создать статическое программное обеспечение, которое мне нужно (вычислительные пакеты); или
- создавать статические компиляторы.
Я выбрал второй и построенный gcc, g++ и gfortran.
Я построил все в
PREFIX=$HOME/cmp/soft/sft
и для make
я использовал
THREADS=8
Ниже gcc построен с помощью
Можно получить последнюю версию gcc: ftp://gcc.gnu.org/pub/gcc/releases
Зависимости можно найти здесь: ftp://gcc.gnu.org/pub/gcc/infrastructure
Зависимости
Я получаю зависимости со следующим script:
#!/bin/sh
# ===========
## variables:
GMP=gmp-4.3.2.tar.bz2
MPFR=mpfr-2.4.2.tar.bz2
MPC=mpc-0.8.1.tar.gz
ISL=isl-0.12.2.tar.bz2
CLOOG=cloog-0.18.1.tar.gz
MIRROR=ftp://gcc.gnu.org/pub/gcc/infrastructure
# ===========
## functions:
extract() {
if [ -f $1 ]; then
case $1 in
*.tar.bz2) tar xvjf $1 ;;
*.tar.gz) tar xvzf $1 ;;
*.bz2) bunzip2 $1 ;;
*.rar) unrar x $1 ;;
*.gz) gunzip $1 ;;
*.tar) tar xvf $1 ;;
*.tbz2) tar xvjf $1 ;;
*.tgz) tar xvzf $1 ;;
*.zip) unzip $1 ;;
*.Z) uncompress $1 ;;
*.7z) 7z x $1 ;;
*) echo "I don't know how to extract '$1'..." ;;
esac
else
echo "'$1' is not a valid file!"
fi
}
# ======================
## download and extract:
wget $MIRROR/$GMP
extract $GMP
wget $MIRROR/$MPFR
extract $MPFR
wget $MIRROR/$MPC
extract $MPC
wget $MIRROR/$ISL
extract $ISL
wget $MIRROR/$CLOOG
extract $CLOOG
Следующая функция bash используется ниже:
mkdircd () { mkdir -p "[email protected]" && eval cd "\"\$$#\""; }
Каждая из приведенных ниже команд должна быть выпущена в каталоге только что загруженного каталога.
GMP
mkdircd build
../configure --disable-shared --enable-static --prefix=$PREFIX/gmp
make -j $THREADS && make check && make install
MPFR
mkdircd build
../configure --with-gmp=$PREFIX/gmp --disable-shared --enable-static --prefix=$PREFIX/mpfr
make -j $THREADS && make install
MPC
mkdircd build
../configure --with-gmp=$PREFIX/gmp --with-mpfr=$PREFIX/mpfr --disable-shared --enable-static --prefix=$PREFIX/mpc
make -j $THREADS && make install
ISL
mkdircd build
../configure --with-gmp-prefix=$PREFIX/gmp --disable-shared --enable-static --prefix=$PREFIX/isl
make -j $THREADS && make install
CLOOG
mkdircd build
../configure --with-gmp-prefix=$PREFIX/gmp --with-isl-prefix=$PREFIX/isl --disable-shared --enable-static --prefix=$PREFIX/cloog
make -j $THREADS && make install
НКА
mkdircd build
export LD_LIBRARY_PATH=$PREFIX/gmp/lib:$PREFIX/mpfr/lib:$PREFIX/mpc/lib:$PREFIX/isl/lib:$PREFIX/cloog/lib
export C_INCLUDE_PATH=$PREFIX/gmp/include:$PREFIX/mpfr/include:$PREFIX/mpc/include:$PREFIX/isl/include:$PREFIX/cloog/include
export CPLUS_INCLUDE_PATH=$PREFIX/gmp/include:$PREFIX/mpfr/include:$PREFIX/mpc/include:$PREFIX/isl/include:$PREFIX/cloog/include
../configure --with-gmp=$PREFIX/gmp --with-mpfr=$PREFIX/mpfr --with-mpc=$PREFIX/mpc --with-isl=$PREFIX/isl --with-cloog=$PREFIX/cloog --disable-shared --enable-static --disable-multilib --prefix=$PREFIX/gcc --enable-languages=c,c++,fortran
make -j $THREADS bootstrap && make install
Ответ 4
Использовал то, что сказал Джонатан выше, за исключением того, что мне пришлось вручную загрузить gmp и mpfr и создать софт-ссылку (дистрибутив gcc 4.4.2, вероятно, не имеет "download_prerequisites" )
cd src/gcc-4.4.2
ln -s ~/linux64/gmp-4.2.1 gmp
ln -s ~/linux64/mpfr-2.3.0 mpfr
Btw, используя "-with-gmp" и "with-mpfr" с "./configure", дал мне "configure: error: не могу вычислить суффикс объектных файлов: невозможно компилировать". Поэтому я загрузил srcs gmp и mpfr, а затем создал мягкую ссылку на него изнутри gcc src top leve dir
Ответ 5
Я следил за верным принятым ответом joelparkerhenderson. Это лучший ответ, который я могу найти для установки в системе * NIX через Интернет.
Для потомков я хочу добавить, что если вы получите ошибку, например
"ошибка установки: невозможно вычислить суффикс объектных файлов: невозможно скомпилировать"
затем обновите LD_LIBRBARY_PATH с помощью /tmp/gcc/lib (см. полный ответ joelparkerhenderson для контекста)
/tmp/gcc/lib содержит все необходимые файлы mpfr/mpc/gmp, а компоновщик времени выполнения не может найти их, если вы не добавите их в LD_LIBRARY_PATH. Также не забудьте экспортировать LD_LIBRARY_PATH;). Больше контекста здесь: https://gcc.gnu.org/wiki/FAQ#configure_suffix
Ответ 6
После попытки установки GCC-зависимостей, включая GMP, MPFR и MPC., я столкнулся с дополнительными требованиями к установке, ошибками и отсутствующими файлами; например, файл заголовка gmp.h, необходимый для установки MPFR. Вы можете отказаться от ряда проблем, с которыми вы столкнетесь. Тем не менее, существует более простой способ создания и установки версии GCC-X.0.0 или позже с автоматической привязкой .
ОПЦИЯ ОДИН.
Чтобы сохранить проблему построения с помощью make, выполните установку и привязку динамических библиотек, просто:
- Загрузите версию GCC-X.0.0 (с последней версией: https://gcc.gnu.org/)
- Извлеките файлы gcc-X-000.tar.gz в папку /somepath/.
- После того, как вы извлекли файл .tar.gz, запустите ./contrib/download_prerequisites script, который находится в каталоге/somepath/или в исходном каталоге.
-
Этот script будет загружать библиотеки поддержки, включая: GMP, MPFR и MPC и создаст для вас Symlinks который будет СТРОИТЬ всех gcc-зависимостей автоматически как часть процесса установки gcc.
Не нужно создавать и связывать библиотеки поддержки, которые были загружены в /somepath/, выпуская Make, Make Install или запуская файл ./configure или добавляя ссылки, такие как - -with-gmp =/gmp_path/.../....., --with-mpfr =/mpfr_path/.../... потому что это было сделано при запуске script, который создал символические ссылки .
ВАРИАНТ ДВА.
- Используйте систему управления пакетами ОС для установки библиотек поддержки в стандартном расположении системы. Для системы на базе Debian, включая Ubuntu, установите пакеты libgmp-dev, libmpfr-dev и libmpc-dev. Для системы на основе RPM, включая Fedora и SUSE, установите gmp-devel, и libmpc-devel ( mpc-devel на SUSE).
- Этот параметр будет устанавливать библиотеки и файлы заголовков в стандартном системном каталоге, где они будут найдены автоматически при создании GCC.
- Это преимущество управления установкой пакета ОС при вызове "sudo apt-get install libgmp-dev" или "sudo apt-get install libmpfr-dev" установка и привязка выполняются для вас. Кроме того, вам не нужно создавать библиотеки поддержки с помощью Make, Make install или ./configure. Кроме того, процесс занимает несколько минут, чтобы завершить весь процесс,
- Теперь вы можете продолжить установку GCC.
КОНФИГУРАЦИЯ:
Это процесс конфигурации GCC, с gcc-X-000.tar.gz
Код>
Вопрос:
tar -xvf gcc-X-000.tar.gz
cd gcc-X-000
. /contrib/download _prerequisites
CD..
mkdir objdir
/../gcc-X-000/configure --prefix = $HOME/gcc-X-000 --enable-languages = c, С++, fortran, go --disable-multilib
make -j 2
сделать установку
Код>
Примечание:
- включить языки, такие как С++ или c.
- отключить-многобиблиотечный; отключите multilib на основе вашей системы и ОС, вам будет предложено продолжить работу с multilib.
Make займет много времени. Однако вы можете указать опцию -j #no_pro. Это будет работать одновременно параллельно, исходя из количества процессоров на вашем ПК или Mac.
Для получения подробной информации о том, как выполнить этот процесс, вы можете посетить:
https://gcc.gnu.org/wiki/InstallingGCC.