Этот вопрос, кажется, правильно решен в нескольких вопросах и в других местах, которые легко найти в 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
чтобы увидеть, откуда он пытается открыть файлы, прочитать файлы журналов, прочитать исходный код, и в конце концов я представляю, что смогу выяснить, как взломать плохо продуманное решение. Но было бы неплохо, если бы кто-нибудь сказал мне, как это сделать в здравом уме.