Nun, da ich 5.3 installiert habe, brauche ich 5.2 nicht mehr. Wenn ich jedoch 5.3 Links zu den '-5'-Namen neu verknüpfe, beende ich ein kurzes Perl-Skript, um Version 5.3 mit reinem gcc zu verknüpfen (d. H. Ohne das Suffix' -5 '). Ich stellte fest, dass das Problem nicht darin bestand, dass gcc 5.2 kaputt war, sondern unter El Capitán gcc (sowohl 5.2 & 5.3) als auch ld nicht/usr/local/lib und/usr/local/include standardmäßig suchen. Sie müssen explizit in die Umgebungsvariablen LIBRARY_PATH bzw. CPLUS_INCLUDE_PATH aufgenommen werden. Außerdem ist ld nicht die Gnu-Version und ignoriert LD_LIBRARY_PATH. Unten ist der Code. Da es sich (hoffentlich) um ein einmal verwendbares Skript handelte, habe ich einige Variablen hart codiert, bei denen es sich um Befehlszeilenoptionen für eine allgemeinere Verwendung handeln könnte.
Lassen Sie mich wissen, wenn der Code nicht klar ist (würde mich nicht überraschen)
#!/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: In Bezug auf Homebrew Verknüpfung mit gcc-5' statt schlicht 'gcc', mein Problem begann weil Homebrew gcc 5.2 mit 'gcc' verband, gcc 5.3 mit' gcc-5'. Bevor ich meine Frage gepostet habe, habe ich 'brew link gcc' erstellt. Es verband gcc 5.3 mit gcc-5, ließ aber gcc 5.2 mit gcc verbunden (ohne -5). Ich habe auch die Homebrew-FAQ und die gcc-Formel gelesen, aber ich habe nicht gefunden, was ich ändern sollte, um Homebrew daran zu hindern, die '-5' anzuhängen. In Bezug auf Symlinks habe ich überlegt, ein Perl-Skript zu schreiben, um die Links zu ändern, wollte aber sehen, ob Homebrew nicht die Möglichkeit hat, die '-5' anzuhängen. – JAC
Verwenden Sie die 5.2 noch für irgendwas? Wenn nicht, würde ich 5.2 über Homebrew deinstallieren, dann 5.3 neu verbinden und/oder später 5.3 neu installieren/aktualisieren. –
@ I'L'I: Jetzt, da ich 5.3 installiert habe, brauche ich 5.2 nicht mehr. Neuverknüpfung 5.3 Links zu den '-5'-Namen, so beendete ich ein kurzes Perl-Skript, um Version 5.3 mit dem einfachen 'gcc' zu verknüpfen (d. H. Ohne das Suffix' -5 '). Ich stellte fest, dass das Problem darin bestand, dass 'gcc' (sowohl 5.2 als auch 5.3) und' ld' unter El Capitán standardmäßig nicht/usr/local/lib und/usr/local/include suchen. Sie müssen explizit in den Umgebungsvariablen 'LIBRARY_PATH' und' CPLUS_INCLUDE_PATH' enthalten sein. Außerdem ist "ld" nicht die Gnu-Version und ignoriert daher "LD_LIBRARY_PATH". – JAC