Also habe ich gcc-4.4 und gcc-4.3 installiert (dasselbe für g ++). Soweit ich mich erinnere, gibt es in Ubuntu ein Tool, das die Symlinks für Sie festlegt, wenn Sie nur angeben, welche Version Sie möchten. Allerdings scheint es in der neuesten Version nicht zu funktionieren, was ich enttäuschend finde.
root@nexus:~# update-alternatives --config gcc
update-alternatives: error: no alternatives for gcc.
root@nexus:~# update-alternatives --config cc
There is only one alternative in link group cc: /usr/bin/gcc
Nothing to configure.
root@nexus:~# dpkg -l | grep gcc | awk '{print $2}'
gcc
gcc-4.3
gcc-4.3-base
gcc-4.3-multilib
gcc-4.4
gcc-4.4-base
gcc-4.4-multilib
gcc-4.5-base
gcc-multilib
lib32gcc1
libgcc1
Irgendwelche Ideen?
Antworten:
Zuerst wurden die aktuellen Update-Alternativen für gcc und g ++ gelöscht:
Installieren Sie Pakete
Es scheint, dass sowohl gcc-4.3 als auch gcc-4.4 nach der Installation von build-essential installiert werden. Wir können jedoch die folgenden Pakete explizit installieren:
Installieren Sie Alternativen
Symbolische Links cc und c ++ werden standardmäßig installiert. Wir werden Symbollinks für gcc und g ++ installieren und dann cc und c ++ mit gcc bzw. g ++ verknüpfen. (Beachten Sie, dass die
10
,20
und30
Optionen sind die Prioritäten für jede Alternative.)Alternativen konfigurieren
Der letzte Schritt ist die Konfiguration der Standardbefehle für gcc, g ++. Es ist einfach, interaktiv zwischen 4.3 und 4.4 zu wechseln:
Oder wechseln Sie mit Skript:
quelle
im Terminal ausführen:
Okay, dieser Teil ist ziemlich einfach. Der schwierige Teil ist, dass wenn Sie den Befehl GCC eingeben, es sich tatsächlich um eine sybolische Verknüpfung zu der Version von GCC handelt, die Sie verwenden. Dies bedeutet, dass wir eine symbolische Verbindung von GCC zu jeder gewünschten Version von GCC herstellen können.
quelle
Ist das wirklich wünschenswert? Es gibt ABI-Änderungen zwischen den
gcc
Versionen. Das Kompilieren von etwas mit einer Version (z. B. dem gesamten Betriebssystem) und das anschließende Kompilieren von etwas anderem mit einer anderen Version kann zu Konflikten führen.Beispielsweise sollten Kernelmodule immer mit derselben Version
gcc
kompiliert werden, die zum Kompilieren des Kernels verwendet wurde. Wenn Sie den Symlink zwischen/usr/bin/gcc
und der in Ihrer Ubuntu-Version verwendeten Version manuell geändert haben , verwenden zukünftige DKMS-Module möglicherweise die falschegcc
Version.Wenn Sie nur Dinge mit einer anderen Version von
gcc
erstellen möchten, ist das auch mit make-skripten einfach genug. Beispielsweise können Sie die Version vongcc
in derCC
Umgebungsvariablen übergeben:Sie benötigen es möglicherweise nicht für den Befehl make (Configure-Skripte ziehen es normalerweise ein), aber es tut nicht weh.
quelle
gcc
es nicht Teil desalternatives
Systems ist und warum dies nicht besonders wünschenswert ist. Wenn keiner von beiden Ihre Meinung ändern wird, tun Sie es einfach manuell.$ sudo apt-get install gcc-6 gcc-7 $ CC="gcc-7" ./configure <much output> $ make # uses gcc-7
Wobeisudo update-alternatives gcc gcc-7
sichergestellt hätte, dass Sie nicht versehentlich ABIs wechseln.Bearbeiten:
Dies setzt voraus, dass Sie zuerst die Version installiert haben, zB mit:
Original:
Und hier ist ein Einzeiler für diejenigen, die faul sind, ändern Sie einfach die Nummer am Ende auf die gewünschte Version. Es wird die Änderung für gcc und / oder g ++ vornehmen
In diesem Beispiel habe ich auf 4.9 umgestellt
Es gibt keine Fehlerprüfungen und was nicht in diesem Beispiel. Daher möchten Sie möglicherweise überprüfen, was ausgeführt wird, bevor Sie es ausführen. Fügen Sie einfach Echo vor sudo hinzu . Der Vollständigkeit halber stelle ich auch folgende Checkline zur Verfügung:
Die Ausgabe der Prüfung sollte ungefähr so aussehen:
Sie können die Version danach überprüfen mit:
Halb detaillierte Erklärung:
quelle
Wie wäre es mit einem symbolischen Link in einem temporären Verzeichnis:
mkdir x && PATH=$PWD/x:$PATH && ln -s /usr/bin/g++-7 $PWD/x/g++
quelle