Saya baru saja menginstal gcc 4.8
menggunakan brew
pada OSX 10.7.5 (Lion)
. Saya sekarang dapat mengkompilasi menggunakan gcc 4.8
dengan menggunakan
g++-4.8 some_file.c
atau menggunakan default gcc 4.2
dengan menggunakan
g++ some_file.c
Saya ingin menggunakan gcc 4.8
sebagai kompiler default untuk Xcode
dan jika saya mengetik gcc
di terminal. Saya kira saya harus mengubah gcc-related
tautan di dalamnya dirname $(which gcc)
.
Kapan saya melakukannya
ls -al $(dirname $(which gcc)) | grep 'gcc\|g++\|c++'
Saya mendapatkan yang berikut ini:
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
Ketika saya berlari: which gcc-4.8
saya mengerti /usr/local/bin/gcc-4.8
.
Langkah-langkah untuk menyelesaikan ini akan sangat membantu.
Silahkan dan terima kasih.
clang 3.3
setara dengangcc 4.8
? Saya percaya saya bisabrew install
melakukannya juga.Jawaban:
Dengan asumsi Anda menggunakan bash (ini default), maka Anda dapat menambahkan / usr / local / bin sebagai prioritas utama Anda di PATH seperti ini:
Ini akan memastikan bahwa / usr / local / bin diperiksa sebelum semua area lain dari path Anda. Kemudian mulailah sesi terminal baru untuk memuat variabel baru.
Cara lain untuk melakukan ini:
sumber
usr/local/bin
.echo $PATH
mengungkapkan: / opt / local / bin: / opt / local / sbin: / opt / local / termasuk: / 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
ke muncul 1 diPATH
- yang tidak berpengaruh - panggilangcc
masih melihat.gcc 4.2
Saya kemudian secara manual membuat symlink, tetapi ketika saya membuka jendela terminal baru dang++
atau (cc|c++|gcc
) semua tidak ditemukan. Aneh. Terima kasih atas bantuan Anda/usr/bin
Unix apa pun (yang merupakan MacOS X) ... kecuali Anda seorang spesialis yang bekerja pada sumber-sumber versi baru dari versi Unix berikutnya ☺.Terima kasih atas bantuan Anda semua. Saya akhirnya hanya membuat alias di dalam
~/.bash_profile
sebagai berikut:Jawaban dari Lynken sangat membantu, tetapi saya mengadaptasinya dengan alias karena lebih mudah bagi saya untuk membatalkan jika perlu.
Secara khusus, jika
PATH
diatur sedemikian rupa sehingga/usr/local/bin
(tempat minuman menempatkan tautangcc 4.8
) muncul sebelum muncul/usr/bin
(di managcc
ditautkan secara default), maka membuat tautan seperti yang disarankan oleh Lyken/usr/local/bin
secara teoritis seharusnya bekerja untuk saya. Dalam praktiknya, itu bukan karena suatu alasan - gagal dengan kesalahan linker dan alias mengatasi kesalahan itu tanpa saya perlu menyelesaikan masalah itu juga.Manfaat lain dari alias adalah bahwa saya tidak harus menaut ke mana saya ingin menangani homebrew dan tidak harus bersaing dengan alat yang terhubung dengan versi gcc di
/usr/local
sumber
/usr/local/bin
. Anda mungkin juga memiliki binari lain yang diinstal dan disembunyikan karena posisi buruk/usr/local/bin
dalam PATH Anda. Harap pertimbangkan sekali lagi jawaban saya, itu menyerang masalah Anda yang sebenarnya sekali, dengan benar dan selamanya.PATH
dan menempatkan/usr/local/bin
sebelumnya. Saya mengakui bahwa pernyataan Anda benar & bahwa saya perlu mengubahPATH
, tetapi (dalam kasus saya - yaitubrew
instalasi defaultgcc 4.8
), saya masih tidak akan memanggilgcc 4.8
secara default ketika saya menelepongcc
karena tidak ada hubungan antara keduanya secara default. Saya harus membuatnya secara manual seperti yang saya lakukan di atas.gcc
langsung dari terminal. Jika Anda menggunakan makefile,clang
masih digunakan, saya hanya menemukan masalah ini ketika menggunakan opsi kompilator yang hanya tersedia digcc
.Saya gunakan untuk gcc-4.8:
dan kembali ke apel gcc:
atau letakkan di file dan kemudian:
source <file>
sumber
Mari kita asumsikan inisialisasi shell aktual Anda selesai
~/.profile
, maka Anda harus memodifikasinya agar dapat menempatkan/usr/local/bin
komponen PATH lainnya di managcc
dan semua biner yang terkait berada.Inilah cara untuk melakukan modifikasi bersih ini:
Hati-hati: jika Anda
~/.profile
sudah terstruktur, skrip shell ini harus disetel secara manual agar sesuai dengan definisi PATH yang benar di tempat yang tepat.sumber
PATH
sehingga/usr/local/bin
terlihat lebih dulu. Ini kemungkinan akan menyelamatkan saya sakit kepala di masa depan. Saya berharap bisa memberi Anda +1. Masalah saya adalah apakahgcc
itu masih tertautgcc 4.2
dan bukangcc 4.8
karena tidak ada symlink untukgcc -> gcc-4.8
di/usr/local/bin
. Saya masih perlu aliasgcc
sebagai digcc-4.8
dalam~/.profile
atau symlink (ln -s gcc-4.8 gcc
)/usr/local/bin
setelah memperbaruiPATH
dengan skrip Anda. Kamu?brew
tidak menambahkan tautan simbolik yang tepat. Apakah Anda membaca jawaban ini pada subjek yang sama: apple.stackexchange.com/a/38247/22003 ?Diasumsikan bahwa membuat alias atau menautkan ke binari gcc yang berbeda akan membuat mereka menggunakan include mereka sendiri sebelum folder system include default.
sumber