Ich arbeite an einem Computercluster mit CentOS6/RHEL6, den ich mit ca. 100 anderen Benutzern teile und der von einem einzelnen IT-Administrator überwacht wird.
Vor kurzem habe ich angefangen, in C++ zu schreiben, und ein Teil meines Codes hängt von C++11 ab. Lautdiese Webseite, C++11 wird von gcc
den Versionen 4.8.1 und höher unterstützt.
Leider liegt auf dem Rechnercluster die Version 4.4.7 vor.
Vor einiger Zeit habe ich aus einem anderen Grund versucht, gcc
Version 4.8.4 an einem Ort unter meinem Home-Verzeichnis auf dem Cluster zu installieren. Die Installation schlug fehl, mitdiese Fehlermeldung. Nach einigem Googeln kam ich zu dem Schluss, dass ich aktualisieren sollte glibc
, also versuchte ich, eine neuere Version davon in meinem Home-Verzeichnis zu installieren. Dasscheiterte dramatisch.
Meine IT-Administratorin kam zu dem Schluss: „Wahrscheinlich wird es nicht funktionieren, die Version von gcc
auf dem Cluster zu ändern.“ Bevor ich sie mit weiteren Fragen nerve (denn an diesem Punktbraucheneine aktualisierte Version vonmancheC-Compiler), ich verwende Crowdsourcing für Folgendes:
(1) Ist gcc
es möglich, die Version 4.8.1+ auf meinem Benutzerkonto zu installieren? (Nachdem ich dies das letzte Mal versucht hatte, sagten einige Leute, dass dies grundsätzlich eine schreckliche Idee sei.)
(2) Wenn die Antwort auf (1) ja lautet, welche Vorkehrungen muss ich diesmal treffen, um sicherzustellen, dass die Installation erfolgreich ist? Ist die Installation glibc
auf meinem Konto notwendig? Ist das machbar?
(3) Wenn die Antwort auf (1) Nein lautet, wäre es für meinen IT-Administrator möglich, eine neuere Version systemweit zu installieren gcc
, ohne Code zu beeinträchtigen, der von der bereits vorhandenen Version abhängt?
(4) Wenn keine der oben genannten Möglichkeiten für durchführbar ist gcc
, ändert sich die Situation mit einem anderen C-Compiler?
Zusammenfassend suche ich jemanden mit Kenntnissen über gcc
(oder einen anderen C-Compiler), der mir erklären kann, wie eine Person (ohne sudo
Befugnis) bei der Aktualisierung vorgehen würde, sofern dies möglich ist.
Antwort1
Ich konnte GCC 4.8.5 aus dem Quellcode in einem Home-Verzeichnis auf Centos 6.7 erstellen. Ich verwende die Distribution glibc; ich musste glibc nicht erstellen.
Vorbehalt: Ich mache das auf einem System, auf dem die Build-Abhängigkeiten für das GCC 4.4.x-Quellpaket der Distribution sowie das libmpc-devel
Paket aus dem Epel-Repository installiert sind. Wenn diese fehlen, müssen Sie sie möglicherweise zuerst aus dem Quellcode in ein Home-Verzeichnis erstellen und den GCC-Build-Prozess irgendwie ändern, um sie von dort aus zu verwenden (falls das überhaupt möglich ist).
Gebäude GCC:
GCC-Quelle abrufen
curl -LO https://mirrors.kernel.org/gnu/gcc/gcc-4.8.5/gcc-4.8.5.tar.bz2
Extrakt
tar xf gcc-4.8.5.tar.bz2
Erstellen Sie ein Build-Verzeichnis außerhalb des GCC-Quellverzeichnisses und gehen Sie dorthin
mkdir build && cd build
Konfigurieren. Ich habe Folgendes gemacht:
../gcc-4.8.4/configure --build=x86_64-linux-gnu --prefix=/home/rakslice/gcc_4_8 \ --enable-checking=release --enable-languages=c,c++,fortran \ --disable-multilib --program-suffix=-4.8
Bauen. Ich habe 4 Kerne, also habe ich Folgendes gemacht:
make -j 5
Installieren
make install
Jetzt kann ich Testcode kompilieren und ausführen.
/home/rakslice/gcc_4_8/bin/g++-4.8 hello.cpp -o hello ./hello Hello, World!
Antwort2
Zu Ihren konkreten Fragen:
(1) Ja, es ist machbar, aber es macht möglicherweise keinen Spaß.
(2) Nein, normalerweise können Sie die System-glibc verwenden. Von gcc aus benötigen Sie libstdc++
, libgcc
usw.
Mein Ansatz wäre, demoffizielle Anweisungen sehr nahund greifen Sie nur dann auf eine inoffizielle Anleitung zurück, wenn diese sehr gut zu Ihrer Plattform passt.
Ich würde mich eigentlich nicht mit 4.8 abgeben und direkt auf eine der aktuellen Release-Reihen (5.2 oder 4.9) umsteigen.
Hinweis: Ich habe selbst keine Nicht-Root-GCC-Installation durchgeführt, aber ich arbeite an Systemen, die verschiedene Versionen von GCC als GNU-Module verwalten.