Ş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;
}
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
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. –
@ 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