Создание GCC в некорневой папке

Хорошо, таким образом, это - мой первый вопрос здесь - вероятно, многих.

Я - новичок Linux и пытаюсь изучить свой путь вокруг создания из источника.

Моя среда: SSH'd через Шпаклевку в Сервер Ubuntu 14.04.5 на VM в Windows 10

Я хочу иметь GCC быть первой программой, которую я создаю из источника.

Вот мой процесс до сих пор:

Для получения GCC так, чтобы я мог создать другой GCC (забавный, я знаю), из моего каталога по умолчанию /home/anton Я работал:

sudo apt-get install build-essential
sudo apt-get install m4
sudo apt-get install texinfo

Моя цель состоит в том, чтобы сделать другой каталог, прочь корня, моего исходного каталога для новой сборки GCC - давайте назовем его /AntonProj1

С чем у меня есть проблема, следующие шаги..., вот мои мысли; сообщите мне, является ли это правильной логикой или если я интерпретирую процесс сборки/зависимости неправильно.

  • Шаг 1), загружают GCC (gcc-4.1-20080630.tar.bz2 из http://www.netgull.com/gcc/snapshots/4.1-20080630/) в /AntonProj1 [Я буду использовать FileZilla для ручного перемещения .bz2 файла в /AntonProj1
  • Шаг 2) выполнение contrib/download_prerequisitesв /AntonProj1
  • Шаг 3) export PREFIX="AntonProj1/opt/gcc-4.1" ??? <-это выглядит правильным?

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

Я считал что-то здесь, которое говорит:

"Обратите внимание на то, что мы создаем все из исходного дерева каталогов, как считается хорошей практикой. Некоторые пакеты только поддерживают здание снаружи, некоторые только внутри и некоторые оба (но может не предложить обширное сверение, делают). Создание GCC в исходном дереве каталогов терпит полный провал, по крайней мере, для более старых версий".

Это просто говорящее, что нормально создавать GCC в /AntonProj1 (так как GCC, который я использую для создания этого GCC, находится в каталоге другого источника); но, например, если я хочу использовать новую сборку GCC, расположенную в /AntonProj1 для создания других программ... скажем, чего-то как Lynx, я должен удостовериться, что исходный каталог Lynx - что-то другое, чем /AntonProj1 ... возможно, что-то как /AntonProj1/Lynx?

TL; DR: что является лучшим подходом для того, как подготовиться компилировать GCC из источника, когда мои ограничения:

  • 1) Загрузите и скомпилируйте GCC в /AntonProj1
  • 2) Используйте GCC, который был загружен и скомпилирован в /AntonProj1 создавать другие программы из источника все в /AntonProj1 папка
1
задан 25 March 2017 в 04:19

2 ответа

Вот процесс, который закончил тем на самом деле, что работал на меня:

Сделайте каталоги для хранения загрузок и разархивированных каталогов:

sudo mkdir -p /AntonProj1/opt/downloads /AntonProj1/tmp
  • Шаг 1), загружают GCC (gcc-4.1-20080630.tar.bz2 из http://www.netgull.com/gcc/snapshots/4.1-20080630/) в /AntonProj1/opt/downloads [Я использовал FileZilla для ручного перемещения .bz2 файла в /AntonProj1

  • Шаг 2) файлы Перемещения к /AntonProj1/opt/downloads

  • Шаг 3) Выполнение следующие команды:

    sudo apt-get install build-essential sudo apt-get m4 sudo apt-get texinfo

    sudo apt-get install libgmp3-dev sudo apt-get install libmpfr-dev libmpfr-doc libmpfr4 libmpfr4-dbg

    sudo apt-get update sudo apt-get upgrade sudo apt-get autoremove

И теперь для самой важной/трудоемкой части: (Это - то, где мы на самом деле удостоверяемся, что создаем в желаемом каталоге /AntonProj1

sudo ./configure -prefix=/AntonProj1 --without-[blah blah]*

* --without-[blah blah] путь состоит в том, чтобы помочь работе через проблемы зависимости, когда Вы делаете команду, которая на самом деле создает из источника:

sudo make

*Таким образом, возможности являются .configure, покажет Вам, что зависимости пропускают... и могут даже остановить, прежде чем make-файл создается. Однако, даже если make-файл создается, когда Вы переходите в на самом деле sudo make Вы можете (чтение: будет) находить, что сборка перестала работать. Так, если Вы продолжаете иметь сбой сборок, даже когда Вы устанавливаете требуемые зависимости, это может быть вопрос сообщения компилятора не волноваться об определенных вещах, это может быть, покончили --without-[blah blah]; больше о ./configure флаги могут быть найдены путем выполнения .configure -h получить доступ к справочному файлу.

Примечание: если Вы действительно заканчиваете тем, что изменились ./configure флаги, необходимо будет работать:

sudo make clean

и затем ./configure снова с новыми флагами.

0
ответ дан 7 December 2019 в 15:38

Во-первых, так как Вы работали sudo apt-get install build-essential Вы должны иметь gcc установленный уже. Можно узнать, какую версию Вы имеете путем выполнения gcc -v. Местоположение этой установленной версии было бы /usr/lib/gcc/version-number/.

/usr/bin/gcc местоположение по умолчанию двоичного файла gcc в Ubuntu.

Затем, Вы хотите установить предыдущую версию.

  1. Для gcc-4.1

Так как эта версия доступна в более старых релизах Ubuntu, у нас должны быть соответствующие репозитории для версии. От некоторого поиска я нашел, что они были следующими, которые должны быть добавлены к /etc/apt/sources.list

deb     http://snapshot.debian.org/archive/debian/20070730T000000Z/ lenny main
deb-src http://snapshot.debian.org/archive/debian/20070730T000000Z/ lenny main
deb     http://snapshot.debian.org/archive/debian-security/20070730T000000Z/ lenny/updates main
deb-src http://snapshot.debian.org/archive/debian-security/20070730T000000Z/ lenny/updates main

*Эти ссылки были взяты из этого ответа.

Затем после выполнения sudo apt-get update новые репозитории будут доступны.

Затем, установите необходимый компилятор. Я обычно устанавливаю gcc и g++ из той же версии для совместимости. Для общей цели это рекомендуется.

Следовательно,

sudo apt-get install gcc-4.1 g++-4.1

2. Проверка доступных компиляторов

На этом этапе у каждого будет два набора компиляторов (oen каждый для g++ и gcc). Они могут быть проверены dpkg --list | grep compiler,

dpkg --list | grep compiler
ii  antlr3.2                              3.2-14                                              all          language tool for constructing recognizers, compilers etc
ii  g++                                   4:5.3.1-1ubuntu1                                    amd64        GNU C++ compiler
ii  g++-4.1                               4.1.2-13                                            amd64        The GNU C++ compiler
ii  g++-4.1-multilib                      4.1.2-13                                            amd64        The GNU C++ compiler (multilib files)
ii  g++-5                                 5.4.0-6ubuntu1~16.04.4                              amd64        GNU C++ compiler
ii  gcc                                   4:5.3.1-1ubuntu1                                    amd64        GNU C compiler
ii  gcc-4.1                               4.1.2-13                                            amd64        The GNU C compiler
ii  gcc-4.1-multilib                      4.1.2-13                                            amd64        The GNU C compiler (multilib files)
ii  gcc-5                                 5.4.0-6ubuntu1~16.04.4                              amd64        GNU C compiler
ii  gcc-5-multilib                        5.4.0-6ubuntu1~16.04.4                              amd64        GNU C compiler (multilib support)
ii  gcc-multilib                          4:5.3.1-1ubuntu1                                    amd64        GNU C compiler (multilib files)
ii  hardening-includes                    2.7ubuntu2                                          all          Makefile for enabling compiler flags for security hardening
ii  libantlr-java                         2.7.7+dfsg-6ubuntu1                                 all          language tool for constructing recognizers, compilers etc (java library)
ii  libllvm3.8:amd64                      1:3.8-2ubuntu3                                      amd64        Modular compiler and toolchain technologies, runtime library
ii  libllvm3.8:i386                       1:3.8-2ubuntu3                                      i386         Modular compiler and toolchain technologies, runtime library
ii  libxkbcommon0:amd64                   0.5.0-1ubuntu2                                      amd64        library interface to the XKB compiler - shared librar

Важный местоположение двух наборов компиляторов, которые могут быть перечислены,

ls -lh /usr/bin/gcc*
lrwxrwxrwx 1 root root    5  五   5  2016 /usr/bin/gcc -> gcc-5
-rwxr-xr-x 1 root root 208K  七  10  2007 /usr/bin/gcc-4.1
-rwxr-xr-x 1 root root 895K 十一  3 10:00 /usr/bin/gcc-5

и

ls -lh /usr/bin/g++*
-rwxr-xr-x 1 root root 210K  七  10  2007 /usr/bin/g++-4.1
-rwxr-xr-x 1 root root 899K 十一  3 09:41 /usr/bin/g++-5
  1. Выбор компилятора для текущей цели (создающий приложение)

Потребовав компиляторов установил, можно просто переключиться среди компиляторов. Это сделано путем обновления списка альтернативных версий приложения. Сделать это, update-alternative команда должна быть выполнена с определенными параметрами.

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 60 --slave /usr/bin/g++ g++ /usr/bin/g++-5
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.1 40 --slave /usr/bin/g++ g++ /usr/bin/g++-4.1
sudo update-alternatives --config gcc

Это свяжется g++ кому: gcc и при изменении только gcc g++ изменится автоматически.

Затем каждый раз, когда Вы хотите измениться, компилятор вводят это:

sudo update-alternatives --config gcc

Затем пользователя спрашивают который компилятор выбрать.

  Selection    Path              Priority   Status
------------------------------------------------------------
* 0            /usr/bin/gcc-5     60        auto mode
  1            /usr/bin/gcc-4.1   40        manual mode
Press <enter> to keep the current choice[*], or type selection number:

Здесь можно выбрать путем нажимания клавиши (0,1) и затем нажатия Enter. Изменение в текущей выбранной версии может быть проверено gcc -v.

4. Создание приложения с помощью установленных компиляторов

Некоторые основные инструкции:

  • Существуют на общих двух шагах, создавая (build) и создание (make). build шаг включает поколение системы определенные коды для установки, которая требует соединения с необходимыми компиляторами. make эквивалентно установке в некотором каталоге. Любое приложение может быть build и make в любой папке, как решено пользователем.
  • Кому: build выбрана временная папка. Эта папка может быть удалена после успешного make шаг. Важный это для make ступите место назначения установки обычно определяется --prefix=/path/to/folder в то время как build скрипт запущен. Например, если сценарий установки .setup затем, в большинстве случаев, ./setup --prefix=/path/to/installation/folder

Поскольку определенные детали обратитесь к руководству или инструкциям для Вашего приложения.

При запущении скрипта сборки текущая выбранная версия компилятора (для gcc и g++) будет использоваться. При запуске установленного приложения поведение будет зависеть от случая, берет ли программа компилятор от переменной среды или связана с определенным двоичным файлом. Это должно быть проверено после установки.


  • cmake и make отдельная утилита, используемая для установки. Различные приложения требуют различных версий, так установите необходимую утилиту и версию соответственно.

  • Шаг build и make то же для компиляторов также.

1
ответ дан 7 December 2019 в 15:38

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

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