2016-04-01 12 views
3

Mac Book Pro'yu El Capitan'a (10.11.4) güncelledim ve gcc 5.2 kırdım, bu yüzden yükledim Hombrew kullanarak gcc 5.3.0, ancak yeni derleyici /usr/local/bin/gcc ile bağlantılı değildir. Bunun yerine, /usr/local/bin/gcc-5 ile bağlantılı. Benzer şekilde, tüm ilgili komutlar (g ++, gcc-ar, gcc-ranlib, ...) artık '-5' eklenirken, düz gcc ailesi w/o '-5' hala 5.2 ile bağlantılıdır.Homebrew gcc 5.3 ile/usr/local/bin/gcc arasında bağlantı kuramıyor (OS X 10.11.4 El Capitan)

Homebrew'ı düz gcc'ye bağlamak için zorlamanın bir yolu var mı?

cevap

0

Homebrew gcc olarak gcc yüklemek değildir, ancak gcc-5 olarak, çatışmalar, bu yüzden gidiş ve çevresinde farklı şeyler değişiyor şeyleri mucking için potansiyel bir yemek tarifi olduğunu hatırlatırız önlemek için.

bazı olası çözümler:

  1. kullanın komut brew link gcc

    OSX - replace gcc version with version installed via Homebrew

  2. oluştur sembolik bağlantılar

    How to symlink a file in Linux?

  3. ilk ve son seçenek muhtemelen daha mantıklı yoldur değiştirerek varsayılan

    Homebrew FAQ

/düzenleme ipuçları için belgeleri okuyun, ama belki bu aradığınız bu değil .. Dokümantasyon, neden sahip olduklarını neden anladığınızı anlamanıza yardımcı olacaktır.

+0

I'L'I @ (şaşırmam) bana bildirin: 'için Homebrew bağlama İlişkin gcc-5' yerine düz' gcc' ait, sorunum başladı Çünkü Homebrew gcc 5.2'yi plain'gcc' ile gcc 5.3'ten 'gcc-5''e bağladı. Sorumu göndermeden önce 'gcc link' demiştim. Gcc 5.3'ü gcc-5'e bağladı ama gcc 5.2'ye gcc (w/o -5) bağlı bıraktı. Homebrew SSS ve gcc formülünü de okudum, fakat Homebrew'ın '-5' değerini eklemesini engellemek için neyi değiştireceğimi bulamadım. Symlinks ile ilgili olarak, bağlantıları değiştirmek için bir Perl yazısı yazmayı düşündüm ama Homebrew'a '-5' eklememesini söylemek için bir yol olup olmadığını görmek istedim. – JAC

+0

Hala herhangi bir şey için 5.2 kullanıyor musunuz? Eğer olmasaydı, 5.2'yi homebrew ile kaldırırdım, sonra 5.3'ü yeniden bağlar ve/veya daha sonra 5.3'i yeniden yükler/günceller. –

+0

@ I'L'I: Şimdi 5.3 kurdum, artık 5.2'e ihtiyacım yok. Ancak, yeniden bağlama 5.'-5' adlarına 3 bağlantı, bu yüzden, 5.3 sürümünü düz 'gcc' (yani '-5' son eki) ile ilişkilendirmek için kısa bir Perl komut dosyası kullanarak sona erdim. Sorunun, El Capitán, gcc' (hem 5.2 & 5.3) hem de 'ld’de/usr/local/lib ve/usr/local/varsayılan değerlerinde arama yapmadığını buldum. Bunlar, sırasıyla LIBRARY_PATH ve CPLUS_INCLUDE_PATH değişkenleri çevre değişkenlerine dahil edilmelidir. Ek olarak, '' 'gnu sürümü değil ve LD_LIBRARY_PATH'yi yok sayar. – JAC

1

Şimdi 5.3 kurdum, artık 5.2'ye ihtiyacım yok. Bununla birlikte, '-5' adlarına 5.3 bağlantıyı yeniden bağlama, bu yüzden sürüm 5.3'ü düz gcc'ye (yani '-5' son ekine) bağlamak için kısa bir Perl betiği kullanarak sona erdim. Sorunun gcc 5.2'nin kırılmadığını, bunun yerine El Capitán, gcc (her ikisi de 5.2 & 5.3) altında olduğunu ve varsayılan olarak/usr/local/lib ve/usr/local/include dizinlerini aramamasını buldum. Bunlar sırasıyla LIBRARY_PATH ve CPLUS_INCLUDE_PATH ortam değişkenlerine açıkça dahil edilmelidir. Ek olarak, ld gnu versiyonu değildir ve dolayısıyla LD_LIBRARY_PATH'ı göz ardı eder. Kod aşağıdadır. Tek kullanımlık bir betik olduğundan (umarım), daha genel kullanım için komut satırı seçenekleri olabilecek bazı değişkenleri kodladım. Kod belirsiz olup olmadığını

#!/usr/bin/perl 
# relink_gcc unlinks the old gcc and links the current version 
# 
# SYNOPSIS: 
# cd /usr/local/bin 
# relink_gcc 
# 
# DESCRIPTION: 
# Homebrew installs gcc version 5.X as gcc-5. All other components 
# of the Gnu Compiler Collection are installed with the '-5' suffix. 
# E.g. g++-5, c++-5, ... However, I prefer to have the names w/o 
# the '-5' suffix so I can use the same Makefiles on different 
# computers. This program changes the links from the plain gcc 
# (and its family) to point to the most recent gcc version. 
# Because 'darwin' also changes version, the program changes the 
# version of programs with 'darwin' in their names to the current 
# version. The gcc and darwin versions are currently hardcoded. 
# 
# CAVEAT: 
# Make a backup of /usr/local/bin and /usr/local/Cellar before 
# using this script 

use strict; 
use warnings; 

my @gcc_5_list = glob('*-5'); 

print "found $#gcc_5_list files ending in '-5'\n"; 


my $new_darwin_version = "15.4.0"; 

foreach my $file (@gcc_5_list){ 
    if (! -l $file){ 
     print "$file is not a symbolic link\n"; 
     next; 
    } 
    my $plain = $file; 
# ..Get rid of the '-5' at the end 
    $plain =~ s/-5$//; 
# ..If the file exists but is not a link, leave it alone. 
    if (-e $plain && (! -l $plain)){ 
     print "$plain is not a link\n"; 
     next; 
    } 
# ..File pointed to by '$file' 
    my $orig = readlink($file); 
# # #  print "$file -> $orig\n"; 

# __Change versions to current ones 
# ..Gnu compiler collection version 
    $orig =~ s/5\.2\.0/5.3.0/g; 
# ..Apple Darwin version 
    $orig =~ s/(darwin)\d{2}\.\d\.\d/$1$new_darwin_version/; 

# ..Skip non-existent files 
    if (! -e $orig){ 
     print "\t$orig does not exist. Skip!\n"; 
     next; 
    } 
# ..If the '$plain' file exists, remove it before linking 
    if (-e $plain){ 
# # #   print "\tWould remove $plain\n"; 
# # #   print "\tunlink $plain\n"; 
     unlink $plain; 
    } 
    else { 
# # #   print "\t$plain does not exist would create\n"; 
    } 
# ..Finally! link the new version 
    symlink $orig, $plain; 

} 
+0

Cevabınıza alışkın olduğunuz perl betiğini eklerseniz oyu kullanırım. :) –

+0

@ I'L'I: Yükledim kod Gecikme için özür dilerim (El Capitán'da _upgrade_'de bozulan başka şeyler düzeltildi) – JAC

+0

Endişeye gerek yok, senaryoyu yayınladığına sevindim, umarım başkalarına yardım eder - şerefe! –