Diese Frage scheint an mehreren Fragen und an anderen Stellen, die mit Google leicht zu finden sind, richtig beantwortet zu werden, aber ich finde die Lösung aus den unten erläuterten Gründen nicht zufriedenstellend. Aber nur zur Vervollständigung habe ich einige relevante Links eingefügt:
/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 ...
Und andere.
Diese Frage bezieht sich jedoch auf die Installation einer sehr spezifischen Version von GCC unter Kali Linux, die als spezifisches Paket nicht ohne weiteres verfügbar zu sein scheint. Die Frage betrifft insbesondere die Installation von Version 6.3.0, da ich diese Version zum Kompilieren eines bestimmten Programms benötige: https://www.reddit.com/r/Monero/comments/6d0ah8/xmrig_miner_new_release/
(Als Bonusfrage können Sie diese Frage gerne beantworten, wenn es einen vernünftigeren Weg gibt, dieses spezielle Problem zu beheben, ohne eine andere Version von GCC zu verwenden. Ich glaube jedoch, dass diese Frage allgemein ist und ich möchte wissen, wie sie unabhängig davon zu tun ist wie man den oben genannten Programmlink richtig macht)
Die Versionen, die für die Installation eines Pakets verfügbar sind, z. B. gcc, können wie folgt ermittelt werden:
apt-cache showpkg gcc
Welches listet die verfügbaren Versionen unter "Versionen:" auf, z
4:7.2.0-1d1
4:4.9.2-2
Die Installation ist dann so einfach wie das Ausstellen
apt-get install gcc:4:4.9.2-2
Dadurch wird die ältere Version 4: 4.9.2-2 installiert, indem einfach (glaube ich) die Installation von 7.2.0-1d1 überschrieben wird, falls vorhanden.
Um Version 4: 4.9.2-2 überhaupt verfügbar zu machen, musste ich deb
http://old.kali.org/kali sana main non-free contrib
meine
/etc/apt/sources.list
Datei hinzufügen und dann ausführen apt-get update
.
Was ist jedoch, wenn die von mir benötigte Version nicht aufgeführt ist?
Ich habe mit verschiedenen Quellen experimentiert, z. B. den hier gefundenen: http://snapshot.debian.org/ und bei verschiedenen anderen Fragen und Websites aus Google-Suchanfragen.
Die meisten von ihnen geben mir Ignorieren oder Fehler, zB wie folgt
Ign:3 http://snapshot.debian.org/archive/debian/20091004T111800Z lenny InRelease
Selbst wenn dies funktionieren würde, scheint es ein sehr schlechter Ansatz zu sein, eine bestimmte Version zu installieren, da das Hinzufügen einer beliebigen Quelle möglicherweise nicht die gewünschte Version hat.
Wenn ich auf snapshot.debian.org nach gcc suche, erhalte ich nur sehr alte Versionen: http://snapshot.debian.org/package/gcc/
Ich wurde schließlich mit diesem Ansatz frustriert und kompilierte GCC 6.3.0 aus dem Quell-Tarball. Die Kompilierung war erfolgreich, aber dann muss ich sie installieren. Ich bin vorsichtig laufen , make install
wie ich es fürchten manipulieren apt
und dpkg
möglicherweise das System zu brechen.
Stattdessen habe ich versucht, es direkt aus dem Build-Verzeichnis auszuführen. Ich habe versucht, einfach das Build-Verzeichnis als ersten Eintrag in meinem PATH hinzuzufügen, was nicht funktioniert hat. Dann habe ich versucht, umzubenennen /usr/bin/gcc
und einen Symlink von dort /usr/bin/gcc
zu erstellen , wo sich meine ausführbare Datei gcc-6.3.0 befindet. Dies stellt das folgende Problem dar:
cc: error trying to exec 'cc1': execvp: No such file or directory, which
Dies wurde mit einem anderen Eintrag in meinem Pfad behoben.
Dann bekomme ich diesen Fehler:
/usr/include/stdio.h:34:21: fatal error: stddef.h: No such file or directory
Was ich vermute, liegt an einem fehlenden Eintrag in /usr/lib/gcc/x86_64-linux-gnu
. Ich habe versucht, einen Symlink von 6 auf 6.3.0 zu erstellen, aber das war nicht ausreichend. Ich habe auch versucht, alles mit dem cp -R
gleichen Ergebnis zu kopieren .
Dies sollte ein 64-Bit-Programm sein, aber ich habe das auch für in Betracht gezogen
/usr/lib/gcc/i686-linux-gnu
.
Ich bin sicher, ich könnte anfangen strace
zu sehen, wo es versucht, die Dateien zu öffnen, Protokolldateien zu lesen, die Quelle zu lesen, und schließlich kann ich mir vorstellen, wie ich eine schlecht konzipierte Lösung zusammenhacken kann. Aber es wäre schön, wenn mir jemand sagen könnte, wie man das auf vernünftige Weise macht.
quelle
Antworten:
GCC 6 ist unter Kali Linux verfügbar und kann wie folgt installiert werden:
Umschalten zwischen gcc6 und gcc7
Beispielausgabe:
Wählen Sie Ihre Standardversion
gcc
.am 2017-08-05 wird die gcc-6 version von
6.3.0
auf aktualisiert6.4.0
.Erstellen einer bestimmten gcc-Version
6.3.0
Laden Sie den Tarball vom nächsten Spiegel herunter : GCC Releases
Hinzufügen
gcc-6.3
zuupdate-alternatives
Wichtig : Die
--disable-multilib
Option ist erforderlich, umgcc
die aktuelle Architektur zu konfigurieren und zu erstellen .GCC WIKI: GCC installieren
quelle
6.3.0
, jetzt wird die gcc6-Version auf aktualisiert6.4.0
.Jetzt sollten Sie auf die gewünschte klicken, und der Download wird gestartet.
Schließlich müssen Sie aus der Quelle kompilieren und installieren: /ubuntu/25961/how-do-i-install-a-tar-gz-or-tar-bz2-file
quelle
make install
möglicherweise manipuliert werdendpkg
oderapt
... können Sie näher darauf eingehen ! @AlphaCentauriWenn Sie einen Standard erstellt haben,
./configure; make
ohne Optionen zu übergebenconfigure
,make install
werden die Teile Ihrer gewünschten Version von GCC in verschiedenen Unterverzeichnissen von abgelegt/usr/local
.Der
/usr/local
Verzeichnisbaum ist für Software vorgesehen, die vom Systemadministrator außerhalb des Paketverwaltungssystems installiert wird (dh genau das, was Sie tun). Daher wird die dort installierte Software die verpackte Software nur unter äußerst ungewöhnlichen Umständen beschädigen.Insbesondere GCC basiert auf der Annahme, dass mehrere Versionen installiert sind. Es erfordert so ziemlich aktive Maßnahmen von Ihrer Seite, um etwas zu zerbrechen (z. B. durch Mischen und Anpassen von Teilen, um zu versuchen, eine Hybridversion zu erstellen).
quelle
configure
Skript (z. B. einige-program-suffix=
usw.)Zunächst würde ich empfehlen, wenn Sie GCC aus seiner Quelle kompilieren, eine neuere Version zu wählen (z. B. GCC 7 Ende 2017).
Stellen Sie dann sicher, dass Sie GCC außerhalb des Quellbaums erstellen und zunächst das
configure
Skript mit versuchen--help
und weitere Optionen an dasconfigure
GCC übergeben . Lesen Sie die GCC-Installationsanweisungen sorgfältig durch und verstehen Sie die Rolle von Autoconf .In der Praxis empfehle ich
Führen Sie
/usr/bin/gcc -v
diese Option aus, um zu verstehen, wie der GCC Ihres Systems konfiguriert wurdeFühren Sie
apt-get build-dep gcc-6
(oder ähnliches) aus, um die GCC-Abhängigkeiten des aktuellen Systems abzurufenErstellen Sie ein Build-Verzeichnis außerhalb Ihres GCC-Quellbaums und führen Sie es weiter aus
.../configure
(...
z . B. durch einen entsprechenden relativen Pfad ersetzen../gcc-7.2/
)make
.Sie möchten wahrscheinlich zumindest
--program-suffix=-mine
das übergebenconfigure
(das-mine
kann durch ein anderes Suffix ersetzt werden) und Sie können es sogar hinzufügen,--prefix=$HOME/soft/
wenn Sie keinen Root-Zugriff haben. Sie werden wahrscheinlich wollen weitere Optionen zuconfigure
und Sie müssen sie sorgfältig wählen und geben.dann würde ein späterer
make install
(Sie könnten sogar ohne root ausgeführt werdenmake install DESTDIR=/tmp/gccinst/
und später sorgfältig und rekursiv als root kopieren, der/tmp/gccinst/
....) Dinge in/usr/local/bin/gcc-mine
etc .... (oder$HOME/soft/bin/gcc-mine
....) installieren, so dass keine vom System installierten Dateien beschädigt werden .Beachten Sie, dass das Paketverwaltungssystem laut FHS in Ruhe gelassen werden muss
/usr/local/
(dies ist die Standardeinstellung--prefix
für GCCsconfigure
).quelle
Sie können auch eine vorkompilierte Toolchain oder diese für Ihre spezifische Architektur verwenden (x86_64, glibc, gcc 6.3).
Die nächste Option ist natürlich die Verwendung eines sogenannten rootfs-Builders wie buildroot oder yocto
, um eine Toolchain mit Ihrer spezifischen gcc-Version zu generieren.
quelle