Ich habe kürzlich gcc 4.8
mit brew
on installiert OSX 10.7.5 (Lion)
. Ich kann jetzt mit Hilfe gcc 4.8
von Verwendung kompilieren
g++-4.8 some_file.c
oder verwenden Sie die Standardeinstellung gcc 4.2
, indem Sie verwenden
g++ some_file.c
Ich möchte gcc 4.8
als Standard-Compiler für Xcode
und verwenden, wenn ich gcc
am Terminal tippe. Ich nehme an, ich muss 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 laufe: 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.
Angenommen, Sie verwenden bash (dies ist die Standardeinstellung), können Sie /usr/local/bin wie folgt als oberste Priorität in PATH hinzufügen:
echo "PATH=\"/usr/local/bin:$PATH\"" >> ~/.bash_profile
Dadurch wird sichergestellt, dass /usr/local/bin vor allen anderen Bereichen Ihres Pfads überprüft wird. Starten Sie dann einfach eine neue Terminalsitzung, um die neue Variable zu laden.
Eine andere Möglichkeit, dies zu tun:
cd /usr/bin
rm cc gcc c++ g++
ln -s /usr/local/bin/gcc-4.8 cc
ln -s /usr/local/bin/gcc-4.8 gcc
ln -s /usr/local/bin/c++-4.8 c++
ln -s /usr/local/bin/g++-4.8 g++
Danke an euch alle für eure Hilfe. Am Ende habe ich nur Aliase ~/.bash_profile
wie folgt erstellt:
alias gcc='gcc-4.8'
alias cc='gcc-4.8'
alias g++='g++-4.8'
alias c++='c++-4.8'
Die Antwort von Lynken ist sehr hilfreich, aber ich habe sie mit Aliasnamen angepasst, da ich das bei Bedarf einfacher rückgängig machen kann.
Insbesondere, wenn PATH
so eingestellt ist, dass /usr/local/bin
(wo brew den Link zu setzt gcc 4.8
) vor dem Erscheinen erscheint /usr/bin
(wo gcc
standardmäßig verlinkt wird), dann 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 Linker-Fehler fehlschlägt, umgehen Aliase diesen Fehler, ohne dass ich dieses Problem ebenfalls lösen muss.
Der andere Vorteil von Aliasen ist, dass ich nicht verlinken muss, was Homebrew handhaben soll, und nicht mit dem Tool konkurrieren muss, für das die Version von gcc verlinkt ist/usr/local
Ich verwende gcc-4.8:
export CC=/usr/local/bin/gcc
export CXX=/usr/local/bin/g++
export CPP=/usr/local/bin/cpp
export LD=/usr/local/bin/gcc
alias c++=/usr/local/bin/c++
alias g++=/usr/local/bin/g++
alias gcc=/usr/local/bin/gcc
alias cpp=/usr/local/bin/cpp
alias ld=/usr/local/bin/gcc
alias cc=/usr/local/bin/gcc
und zurück zu apple gcc:
export CC=/usr/bin/gcc
export CXX=/usr/bin/g++
export CPP=/usr/bin/cpp
export LD=/usr/bin/ld
alias c++=/usr/bin/c++
alias g++=/usr/bin/g++
alias gcc=/usr/bin/gcc
alias cpp=/usr/bin/cpp
alias cc=/usr/bin/gcc
alias ld=/usr/bin/ld
oder lege es in eine Datei und dann:source <file>
Nehmen wir an, Ihre eigentliche Shell-Initialisierung erfolgt über ~/.profile
, dann müssen Sie sie so ändern, dass sie /usr/local/bin
jeder anderen PATH-Komponente vorangestellt wird, in der gcc
sich alle zugehörigen Binärdateien befinden.
So führen Sie diese saubere Änderung durch:
CD _shell_init=`egrep '(^| )PATH' .profile 2>/dev/null` if [ "${_shell_init}" = "" ] ; dann # PATH ist nicht in .profile definiert # Installieren Sie dort die erste relative Definition von PATH echo 'PATH=/usr/local/bin:${PATH} export PATH' >>.profile . .Profil ausführen ${SHELL} anders # Alle Vorkommen von /usr/local/bin entfernen, wo immer sie auch sein mögen # in PATH setzen und vor allen anderen Komponenten einfügen sed -E -e '/(^| )PATH=/s,:/usr/local/bin,,' \ -e '/(^| )PATH=/s,/usr/local/bin:,,' \ -e '/(^| )PATH=/s,,&/usr/local/bin:,' .profile >.profile.new mv .profil.neues .profil . .Profil ausführen ${SHELL} fi
Achtung: Wenn Ihr ~/.profile
bereits strukturiert ist, muss dieses Shell-Skript manuell angepasst werden, um die richtige PATH-Definition an der richtigen Stelle einzufügen.
PATH
, damit /usr/local/bin
man es zuerst sieht. Das wird mir in Zukunft wahrscheinlich Kopfschmerzen ersparen. Ich wünschte, ich könnte dir +1 geben. Mein Problem ist jedoch, dass gcc
es immer noch mit verknüpft ist gcc 4.2
und nicht, gcc 4.8
weil es keinen Symlink für gcc -> gcc-4.8
in gibt /usr/local/bin
. Ich müsste nach der Aktualisierung mit Ihrem Skript immer noch entweder einen Alias gcc
wie gcc-4.8
innerhalb ~/.profile
oder einen Symlink ( ln -s gcc-4.8 gcc
) verwenden. Ihr?
/usr/local/bin
PATH
brew
nicht die richtigen symbolischen Links hinzugefügt habe. Haben Sie diese Antwort zum gleichen Thema gelesen: apple.stackexchange.com/a/38247/22003 ?Es wird davon ausgegangen, dass das Erstellen eines Alias oder das Verknüpfen mit verschiedenen gcc-Binärdateien dazu führt, dass sie ihr eigenes Include vor dem standardmäßigen Include-Ordner des Systems verwenden.
BSO
sudo rm -rf
nicht nurrm
undsudo ln
nicht einfachln
Jack
csrutil disable
im Neustartmodus auf dem Mac laufen.