2016-12-19 6 views
3

Ich habe vor kurzem eine ältere Version von GCC erstellt und in meinem Home-Verzeichnis (spec. ~/local/gcc-5.3.0) installiert. Ich benötige diesen Compiler jedoch nur für CUDA-Projekte und werde die restliche Zeit mit dem Systemcompiler (GCC 6.2.1) arbeiten. Also, ich denke, ich muss einen Weg finden, um zwischen diesen zu wechseln, wann immer es benötigt wird, und auf eine Weise, die auch die Bibliothek ändert und Pfade entsprechend einfügt.Zwischen verschiedenen GCC-Versionen wechseln

Ich verstehe, dass update-alternatives ist eine Möglichkeit, dies zu tun, aber es scheint, root Berechtigungen zu erfordern, die eingerichtet werden, die ich nicht habe.

Das nächste Beste, was könnte sein, eine Shell-Funktion in .bashrc zu schreiben, dass die folgenden gewährleistet:

  • Jeder Anruf schaltet zwischen System und lokalem gcc

  • Jedes Mal, wenn ein Schalter gemacht wird, sie paßt Pfade, so dass wenn lokale gcc gewählt wird, sucht es zuerst nach Header-Dateien und Bibliotheken, die von selbst installiert wurden, bevor in Systempfade wie oder usr/local/lib suchen. Eine vorherige answer schlägt vor, dass die Änderung LD_LIBRARY_PATH ausreichend sein sollte, weil eine GCC-Installation "weiß", wo ihre eigenen Header-Dateien und statische Bibliotheken sind (ich bin mir nicht sicher, ob es richtig ist, dachte ich, ich müsste CPATH ändern, usw.).

Ist das oben der beste Weg, dies zu erreichen? Wenn ja, welche Pfade sollte ich bei der Implementierung einer solchen Funktion setzen?

+0

Mein persönlicher Ansatz dazu ist nicht sehr anspruchsvoll: Ich habe ein Shell-Skript, das nur die dir CUDA bin fügt und die passende gcc bin dir zu $ ​​PATH. Eigentlich habe ich mehrere Skripte, um verschiedene CUDA-Versionen herumzuhalten. Wenn ich nicht mehr mit CUDA arbeite oder zu einer anderen Version wechseln möchte, öffne ich eine neue Shell. – tera

+0

Sie erwähnen, nur 'bin' Verzeichnis von gcc zu' PATH' hinzuzufügen. Ist es nicht notwendig, LD_LIBRARY_PATH zu ändern, wenn nicht die Include-Verzeichnisse? – rahul1210

+1

Sowohl nvcc als auch gcc wissen, wo sich ihre Bibliotheken befinden. Daher ist es einfach ausreichend $ PATH zu ändern. – tera

Antwort

1

Ist das oben der beste Weg, dies zu erreichen? Wenn ja, Welche Pfade sollte ich bei der Implementierung einer solchen Funktion einstellen?

Wie andere hingewiesen haben, sind PATH und LD_LIBRARY_PATH obligatorisch. Sie können auch MANPATH auf Vollständigkeit aktualisieren.

Anstatt das Rad in .bashrc neu zu erfinden, schlage ich vor, ein wenig bekannt, aber extrem handlich und modular Environment Modules, die für diesen speziellen Zweck entwickelt wurden, zu verwenden. Man könnte sie wie verwenden (wenn Sie Config für gcc/3.1.1 einrichten):

$ module load gcc/3.1.1 
$ which gcc 
/usr/local/gcc/3.1.1/linux/bin/gcc 
$ module unload gcc 
$ which gcc 
gcc not found 
+0

Scheint wie ein hübsches geschicktes Werkzeug, um Shell-Umgebungsvariablen zu konfigurieren. Jetzt müssen Sie nur herausfinden, wie Sie tatsächlich eine Moduldatei für meinen Zweck schreiben. Danke für Ihre Hilfe. – rahul1210

Verwandte Themen