Этот вопрос, кажется, правильно решен в нескольких вопросах и в других местах, которые легко найти в Google, но я не нахожу решение удовлетворительным по причинам, изложенным ниже. Но просто для завершения я включил несколько соответствующих ссылок:
/ubuntu/138284/how-to-downgrade-a-package-via-apt-get /ubuntu/428772/how-to-install-specific-version-of -some-package / 428778 /ubuntu/26498/choose-gcc-and-g-version ...
И другие.
Тем не менее, этот вопрос касается установки очень специфической версии GCC в Kali Linux, которая недоступна в виде специального пакета. В частности, вопрос касается того, как установить версию 6.3.0, поскольку мне нужна эта версия для компиляции конкретной программы: https://www.reddit.com/r/Monero/comments/6d0ah8/xmrig_miner_new_release/.
(В качестве дополнительного вопроса, если есть более разумный способ решить эту конкретную проблему без использования другой версии GCC, не стесняйтесь отвечать, но я считаю, что этот вопрос является общим, и я хотел бы знать, как это сделать, независимо от того, как правильно сделать ссылку на вышеупомянутую программу)
Версии, доступные для установки любого пакета, например, gcc, могут быть определены с помощью:
apt-cache showpkg gcc
Который будет перечислять доступные версии в «версии:», например,
4:7.2.0-1d1
4:4.9.2-2
Установка тогда так же просто, как выдача
apt-get install gcc:4:4.9.2-2
Это установит старую версию 4: 4.9.2-2, просто (я полагаю) перезаписав установку 7.2.0-1d1, если она есть.
Чтобы получить версию 4: 4.9.2-2, я должен был добавить ее deb
http://old.kali.org/kali sana main non-free contrib
в свой
/etc/apt/sources.list
файл и запустить apt-get update
.
Однако, что если нужной мне версии нет в списке?
Я экспериментировал с различными источниками, например, найденными здесь: http://snapshot.debian.org/, а также с различными другими вопросами и веб-сайтами из поисковых запросов Google.
Большинство из них дают мне игнорирование или ошибки, например, следующим образом
Ign:3 http://snapshot.debian.org/archive/debian/20091004T111800Z lenny InRelease
Даже если это сработает, кажется, это очень плохой подход к установке конкретной версии, так как при добавлении какого-либо произвольного источника может не быть нужной версии.
Если я ищу gcc на snapshot.debian.org, я получаю только очень старые версии: http://snapshot.debian.org/package/gcc/
В конечном итоге я разочаровался в этом подходе и скомпилировал GCC 6.3.0 из исходного архива. Компиляция прошла успешно, но потом я столкнулся с тем, как ее установить. Я осторожно работает , make install
как я боюсь , что это будет искажать apt
и dpkg
и , возможно , сломать систему.
Вместо этого я попытался запустить его непосредственно из каталога сборки. Я попытался просто добавить каталог сборки в качестве первой записи в моем PATH, но это не сработало. Затем я попытался переименовать /usr/bin/gcc
и создать символическую ссылку, /usr/bin/gcc
откуда живет мой исполняемый файл gcc-6.3.0. Это представляет следующую проблему:
cc: error trying to exec 'cc1': execvp: No such file or directory, which
Это было исправлено с другой записью в моем ПУТИ.
Затем я получаю эту ошибку:
/usr/include/stdio.h:34:21: fatal error: stddef.h: No such file or directory
Я полагаю, это из-за отсутствия записи в /usr/lib/gcc/x86_64-linux-gnu
. Я пытался сделать символическую ссылку с 6 до 6.3.0, но этого было недостаточно. Я также пытался скопировать все с cp -R
тем же результатом.
Это должна быть 64-битная программа, но я также рассмотрел то же самое для
/usr/lib/gcc/i686-linux-gnu
.
Я уверен, что смогу начать с того, strace
чтобы увидеть, откуда он пытается открыть файлы, прочитать файлы журналов, прочитать исходный код, и в конце концов я представляю, что смогу выяснить, как взломать плохо продуманное решение. Но было бы неплохо, если бы кто-нибудь сказал мне, как это сделать в здравом уме.
источник
Ответы:
GCC 6 доступен на Linux, его можно установить следующим образом:
Для переключения между gcc6 и gcc7
образец вывода:
Выберите
gcc
версию по умолчанию .2017-08-05 версия gcc-6 обновлена с
6.3.0
до6.4.0
.Сборка конкретной версии gcc
6.3.0
Загрузите архив с ближайшего зеркала : GCC Releases
Добавить
gcc-6.3
вupdate-alternatives
Важный :
--disable-multilib
опция требуется, чтобы настроить и построитьgcc
для текущей архитектуры.GCC WIKI: Установка GCC
источник
6.3.0
, теперь версия gcc6 обновлена до6.4.0
.Теперь вы должны нажать на тот, который вы хотите иметь, и загрузка начнется.
Наконец, вы должны скомпилировать и установить из исходного кода: /ubuntu/25961/how-do-i-install-a-tar-gz-or-tar-bz2-file
источник
make install
может повлиятьdpkg
илиapt
... можете уточнить! @AlphaCentauriЕсли вы выполнили стандарт
./configure; make
без передачи каких-либо параметровconfigure
, тоmake install
поместите фрагменты желаемой версии GCC в различные подкаталоги/usr/local
./usr/local
Дерево каталогов предназначена для программного обеспечения , установленного системным администратором внешней системы управления пакетами (то есть. Именно то , что вы делаете). Таким образом, установленное там программное обеспечение не нарушит упакованное программное обеспечение, за исключением крайне необычных обстоятельств.GCC, в частности, основан на предположении, что у вас будет установлено несколько версий. Это в значительной степени требует активных мер с вашей стороны, чтобы сломать что-либо (например, путем смешивания и сопоставления частей, чтобы попытаться создать гибридную версию).
источник
configure
сценария (например , некоторые и-program-suffix=
т.д.)Во-первых, я бы порекомендовал, если вы компилируете GCC из его источника, выбрать более свежую версию (например, GCC 7 в конце 2017 года).
Затем обязательно соберите GCC вне его исходного дерева и попробуйте сначала его
configure
сценарий--help
и передайте ему больше параметровconfigure
. Прочитайте внимательно к установке GCC инструкции и понять роль Autoconf .На практике я рекомендую
запустить,
/usr/bin/gcc -v
чтобы понять, как был настроен GCC вашей системызапустить
apt-get build-dep gcc-6
(или аналогичный), чтобы получить последние системные зависимости GCCсоздайте каталог сборки вне вашего исходного кода GCC и запустите его дальше
.../configure
(замените...
его соответствующим относительным путем, например../gcc-7.2/
) иmake
там.вы, вероятно, захотите перейти хотя бы
--program-suffix=-mine
к этомуconfigure
(-mine
можно заменить другим суффиксом), и вы можете даже добавить,--prefix=$HOME/soft/
если у вас нет доступа с правами root. Вы , вероятно , хотите дополнительные опции к ,configure
и вы должны выбрать и дать им тщательно.затем более поздняя версия
make install
(вы даже можете запустить ее без прав root,make install DESTDIR=/tmp/gccinst/
а затем аккуратно и рекурсивно копировать ее как root, которая/tmp/gccinst/
....) установит все в/usr/local/bin/gcc-mine
etc .... (или$HOME/soft/bin/gcc-mine
....), поэтому не будет нарушать установленные системные файлы ,Обратите внимание, что FHS требует, чтобы система управления пакетами оставалась одна
/usr/local/
(по умолчанию--prefix
для GCCconfigure
)источник
Вы также можете использовать предварительно скомпилированный набор инструментов или этот для вашей конкретной архитектуры (x86_64, glibc, gcc 6.3).
Конечно, следующий вариант - использовать так называемый rootfs-builder, такой как buildroot или yocto,
для генерации цепочки инструментов с вашей конкретной версией gcc.
источник