Ich habe vor kurzem gcc 4.8
mit brew
auf installiert OSX 10.7.5 (Lion)
. Ich kann jetzt mithilfe gcc 4.8
von kompilieren
g++-4.8 some_file.c
oder verwenden Sie die Standardeinstellung gcc 4.2
mit
g++ some_file.c
Ich möchte gcc 4.8
als Standard-Compiler verwenden Xcode
und wenn ich gcc
am Terminal tippe. Ich nehme an, ich muss die gcc-related
Links innerhalb ändern dirname $(which gcc)
.
Wenn ich es tue
ls -al $(dirname $(which gcc)) | grep 'gcc\|g++\|c++'
Ich bekomme folgendes:
lrwxr-xr-x 1 root wheel 7 Jul 31 12:17 c++ -> clang++
-rwxr-xr-x 1 root wheel 909360 Nov 18 2011 c++filt
lrwxr-xr-x 1 root wheel 5 Jul 31 12:17 clang++ -> clang
lrwxr-xr-x 1 root wheel 12 Jul 31 12:17 g++ -> llvm-g++-4.2
lrwxr-xr-x 1 root wheel 12 Jul 31 12:17 gcc -> llvm-gcc-4.2
lrwxr-xr-x 1 root wheel 28 Jul 31 12:17 gcov-4.2 -> ../llvm-gcc-4.2/bin/gcov-4.2
lrwxr-xr-x 1 root wheel 52 Jul 31 12:17 i686-apple-darwin11-llvm-g++-4.2 -> ../llvm-gcc-4.2/bin/i686-apple-darwin11-llvm-g++-4.2
lrwxr-xr-x 1 root wheel 52 Jul 31 12:17 i686-apple-darwin11-llvm-gcc-4.2 -> ../llvm-gcc-4.2/bin/i686-apple-darwin11-llvm-gcc-4.2
lrwxr-xr-x 1 root wheel 32 Jul 31 12:17 llvm-cpp-4.2 -> ../llvm-gcc-4.2/bin/llvm-cpp-4.2
lrwxr-xr-x 1 root wheel 32 Jul 31 12:17 llvm-g++ -> ../llvm-gcc-4.2/bin/llvm-g++-4.2
lrwxr-xr-x 1 root wheel 32 Jul 31 12:17 llvm-g++-4.2 -> ../llvm-gcc-4.2/bin/llvm-g++-4.2
lrwxr-xr-x 1 root wheel 32 Jul 31 12:17 llvm-gcc -> ../llvm-gcc-4.2/bin/llvm-gcc-4.2
lrwxr-xr-x 1 root wheel 32 Jul 31 12:17 llvm-gcc-4.2 -> ../llvm-gcc-4.2/bin/llvm-gcc-4.2
Wenn ich renne, which gcc-4.8
bekomme ich /usr/local/bin/gcc-4.8
.
Schritte, um dies zu erreichen, wären sehr hilfreich.
Bitte und Dankeschön.
clang 3.3
das entsprichtgcc 4.8
? Ich glaube, ich kannbrew install
es auch.Antworten:
Angenommen, Sie verwenden bash (dies ist die Standardeinstellung), dann können Sie / usr / local / bin als oberste Priorität in PATH wie folgt hinzufügen:
Dadurch wird sichergestellt, dass / usr / local / bin vor allen anderen Bereichen Ihres Pfades überprüft wird. Starten Sie dann einfach eine neue Terminalsitzung, um die neue Variable zu laden.
Ein anderer Weg dies zu tun:
quelle
usr/local/bin
.echo $PATH
enthüllt: / opt / local / bin: / opt / local / sbin: / opt / local / include: / usr / local / mysql / bin: / usr / bin / bjam: / usr / bin: / bin: / usr / sbin: / sbin: / usr / local / bin: / usr / X11 / bin: / usr / local / go / bin: / usr / texbin/usr/local/bin
um 1. in zu erscheinenPATH
- was keinen Effekt hatte -gcc
schaut noch zu.gcc 4.2
Ich habe dann die Symlinks manuell erstellt, aber wenn ich ein neues Terminalfenster öffne undg++
oder (cc|c++|gcc
) werden nicht alle gefunden. Seltsam. Vielen Dank für Ihre Hilfe/usr/bin
eines Unix zu spielen (welches MacOS X ist) ... es sei denn, Sie sind ein Spezialist, der an den Quellen einer neuen Version der nächsten Unix-Version arbeitet ☺.Ich danke Ihnen allen für Ihre Hilfe. Am Ende habe ich nur Aliase
~/.bash_profile
wie folgt erstellt:Die Antwort von Lynken ist sehr hilfreich, aber ich habe sie mit Alias angepasst, da ich sie bei Bedarf leichter rückgängig machen kann.
Insbesondere, wenn
PATH
so eingestellt ist, dass/usr/local/bin
(wo Brew den Link setztgcc 4.8
) vor dem Erscheinen erscheint/usr/bin
(wogcc
standardmäßig verlinkt ist), sollte das Erstellen von Links, wie von Lyken vorgeschlagen,/usr/local/bin
theoretisch für mich funktionieren. In der Praxis ist dies aus irgendeinem Grund nicht der Fall. Wenn ein Linkerfehler auftritt und Aliase diesen Fehler umgehen, muss ich auch dieses Problem nicht lösen.Der andere Vorteil von Aliasen ist, dass ich nicht verknüpfen muss, was Homebrew verarbeiten soll, und nicht mit dem Tool konkurrieren muss, für das die Version von gcc verknüpft ist
/usr/local
quelle
/usr/local/bin
. Möglicherweise sind auch andere Binärdateien installiert und ausgeblendet, da die Position/usr/local/bin
in Ihrem PATH nicht stimmt. Bitte denken Sie noch einmal an meine Antwort, sie greift Ihr echtes Problem einmal, richtig und für immer an.PATH
und/usr/local/bin
vor allem gestellt habe. Ich gebe zu, dass Ihre Aussage korrekt ist und dass ich sie ändern musstePATH
, aber (in meinem Fall - dh bei der Standardinstallationbrew
vongcc 4.8
) rufe ich immer noch nichtgcc 4.8
standardmäßig auf, wenn ich anrufe,gcc
da es standardmäßig keinen Symlink zwischen den beiden gibt. Ich musste es wie oben manuell erstellen.gcc
direkt vom Terminal ausgeführt werden. Wenn Sie ein Makefile verwenden, dasclang
immer noch verwendet wird, habe ich dieses Problem nur bei Verwendung einer Compiler-Option gefunden, die nur in verfügbar istgcc
.Ich benutze zu gcc-4.8:
und zurück zu apple gcc:
oder legen Sie es in die Datei und dann:
source <file>
quelle
Nehmen wir an, Ihre eigentliche Shell-Initialisierung ist abgeschlossen
~/.profile
, und Sie müssen sie so ändern, dass sie/usr/local/bin
vor jeder anderen PATH-Komponente steht, in der sichgcc
alle zugehörigen Binärdateien befinden.So führen Sie diese bereinigte Änderung durch:
Achtung: Wenn Ihr
~/.profile
Skript bereits strukturiert ist, muss es manuell angepasst werden, um die richtige PATH-Definition an der richtigen Stelle zu finden.quelle
PATH
so dass/usr/local/bin
zuerst gesehen wird. Dies wird mir wahrscheinlich in Zukunft Kopfschmerzen ersparen. Ich wünschte, ich könnte dir +1 geben. Mein Problem ist jedoch, dassgcc
immer noch ein Link zugcc 4.2
und nicht,gcc 4.8
weil es keinen Symlink fürgcc -> gcc-4.8
in gibt/usr/local/bin
. Ich müsste nach dem Update mit Ihrem Skript immer noch entweder einen Aliasgcc
alsgcc-4.8
in~/.profile
oder symlink (ln -s gcc-4.8 gcc
) in verwenden . Ihr?/usr/local/bin
PATH
brew
dass ich nicht die richtigen symbolischen Links hinzugefügt habe. Haben Sie diese Antwort zum selben Thema gelesen: apple.stackexchange.com/a/38247/22003 ?Es wird davon ausgegangen, dass beim Erstellen eines Alias oder beim Verknüpfen mit verschiedenen gcc-Binärdateien ein eigenes Include verwendet wird, bevor der Standard-Include-Ordner des Systems verwendet wird.
quelle