Niedawno zainstalowano gcc 4.8
używając brew
na OSX 10.7.5 (Lion)
. Teraz mogę kompilować za gcc 4.8
pomocą
g++-4.8 some_file.c
lub używając domyślnego gcc 4.2
za pomocą
g++ some_file.c
Chcę użyć gcc 4.8
jako domyślnego kompilatora Xcode
i jeśli piszę gcc
na terminalu. Przypuszczam, że muszę zmienić gcc-related
linki wewnątrz dirname $(which gcc)
.
Kiedy robię
ls -al $(dirname $(which gcc)) | grep 'gcc\|g++\|c++'
Dostaję następujące:
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
Kiedy biegnę: which gcc-4.8
rozumiem /usr/local/bin/gcc-4.8
.
Kroki, aby to zrobić, byłyby bardzo pomocne.
Proszę i dziękuję.
clang 3.3
odpowiednikiemgcc 4.8
? Wierzę, że też mogębrew install
.Odpowiedzi:
Zakładając, że używasz bash (jest to ustawienie domyślne), możesz dodać / usr / local / bin jako swój najwyższy priorytet w PATH w następujący sposób:
Zapewni to sprawdzenie / usr / local / bin przed wszystkimi innymi obszarami na twojej ścieżce. Następnie po prostu uruchom nową sesję terminala, aby załadować nową zmienną.
Inny sposób to zrobić:
źródło
usr/local/bin
.echo $PATH
ujawnia: / 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
aby pojawić się jako pierwsze wPATH
- co nie miało żadnego efektu - wywołaniegcc
wciąż patrzy na.gcc 4.2
Następnie ręcznie utworzyłem dowiązania symboliczne, ale kiedy otwieram nowe okno terminala i /g++
lub (cc|c++|gcc
) wszystkie nie zostają znalezione. Dziwne. Dzięki za pomoc/usr/bin
żadnym Uniksie (którym jest MacOS X)… chyba że jesteś specjalistą pracującym nad źródłami nowej wersji kolejnej wersji Unixa ☺.Dziękuję wam wszystkim za pomoc. Skończyło się na tworzeniu aliasów w
~/.bash_profile
następujący sposób:Odpowiedź od Lynkena jest bardzo pomocna, ale dostosowałem ją do aliasów, ponieważ łatwiej jest mi ją cofnąć w razie potrzeby.
W szczególności, jeśli
PATH
jest ustawione tak, że/usr/local/bin
(gdzie brew umieszcza linkgcc 4.8
) pojawia się przed/usr/bin
( pojawiagcc
się domyślnie link), to tworzenie linków zgodnie z sugestią Lykena/usr/local/bin
powinno teoretycznie działać dla mnie. W praktyce nie robi to z jakiegoś powodu - błąd z błędem linkera i aliasy obejście tego błędu bez mojej potrzeby rozwiązania tego problemu.Inną zaletą aliasów jest to, że nie muszę linkować, z którym chcę obsługiwać homebrew, i nie muszę konkurować z tym narzędziem, dla którego jest połączona wersja gcc
/usr/local
źródło
/usr/local/bin
. Możesz także mieć zainstalowane i ukryte inne pliki binarne z powodu złego pozycjonowania/usr/local/bin
w ŚCIEŻCE. Zastanówcie się raz jeszcze nad moją odpowiedzią, która raz na zawsze atakuje twój prawdziwy problem.PATH
i postawiłem/usr/local/bin
przede wszystkim. Przyznaję, że twoje stwierdzenie jest poprawne i że muszę to zmienićPATH
, ale (w moim przypadku - tj. Domyślnabrew
instalacjagcc 4.8
) nadal nie dzwonięgcc 4.8
domyślnie, gdy dzwonię,gcc
ponieważ domyślnie nie ma dowiązania symbolicznego między nimi. Musiałem ręcznie go utworzyć, tak jak powyżej.gcc
bezpośrednio z terminala. Jeśli używasz makefile,clang
jest nadal używany, ten problem znalazłem tylko przy użyciu opcji kompilatora dostępnej tylko wgcc
.Używam do gcc-4.8:
i powrót do Apple GCC:
lub umieść go w pliku, a następnie:
source <file>
źródło
Załóżmy, że twoja rzeczywista inicjalizacja powłoki została wykonana
~/.profile
, wtedy będziesz musiał ją zmodyfikować, aby/usr/local/bin
wyprzedzić dowolny inny składnik PATH, gdziegcc
i wszystkie powiązane z nim pliki binarne.Oto sposób przeprowadzenia tej czystej modyfikacji:
Uwaga: jeśli masz
~/.profile
już strukturę, ten skrypt powłoki będzie musiał zostać ręcznie dostrojony, aby dopasować poprawną definicję ŚCIEŻKI we właściwym miejscu.źródło
PATH
aby/usr/local/bin
zobaczyć to jako pierwsze. To prawdopodobnie uratuje mi bóle głowy w przyszłości. Chciałbym dać ci +1. Mój problem jest jednak, żegcc
nadal jest związanagcc 4.2
, a niegcc 4.8
dlatego, że nie ma dla dowiązaniegcc -> gcc-4.8
w/usr/local/bin
. Nadal będę musiał albo użyć aliasugcc
jakogcc-4.8
w~/.profile
środku, albo symlink (ln -s gcc-4.8 gcc
) w/usr/local/bin
po aktualizacjiPATH
ze skryptu. Człek?brew
że nie dodałem odpowiednich linków symbolicznych. Czy przeczytałeś tę odpowiedź na ten sam temat: apple.stackexchange.com/a/38247/22003 ?Zakłada się, że utworzenie aliasu lub połączenie z różnymi plikami binarnymi gcc spowoduje, że będą używać własnych plików dołączanych przed domyślnym folderem dołączania systemu.
źródło