2016-04-01 6 views
3

Ich habe gerade mein Mac Book Pro auf El Capitan (10.11.4) aktualisiert und gcc 5.2 kaputt gemacht, also habe ich es installiert gcc 5.3.0 mit Homebrew, aber der neue Compiler ist nicht mit /usr/local/bin/gcc verknüpft. Stattdessen ist es mit /usr/local/bin/gcc-5 verknüpft. Gleichermaßen haben alle verwandten Befehle (g ++, gcc-ar, gcc-ranolib, ...) jetzt die '-5' angehängt, während die einfache gcc-Familie w/o '-5' immer noch mit 5.2 verbunden ist.Homebrew verbindet gcc 5.3 nicht mit/usr/local/bin/gcc (OS X 10.11.4 El Capitan)

Gibt es eine Möglichkeit, Homebrew zu zwingen, auf plain gcc zu verlinken?

Antwort

0

Homebrew nicht installiert gcc als gcc, sondern als gcc-5, um Konflikte zu vermeiden, so beachten Sie, dass zu gehen und die Dinge um anders stellt ein mögliches Rezept ändern, für Dinge mucking.

Einige mögliche Lösungen:

  1. Verwenden Sie den Befehl brew link gcc

    OSX - replace gcc version with version installed via Homebrew

  2. erstellen symbolische Links

    How to symlink a file in Linux?

  3. Lesen Sie die Dokumentation für Tipps zur Bearbeitung/ändern Standardwerte

    Homebrew FAQ

Die erste und letzte Option wahrscheinlich die sinnvollere Weg ist, aber das ist vielleicht nicht das, was Sie suchen .. Die Dokumentation hilft Ihnen zu verstehen, warum sie es so gemacht haben, wie sie es getan haben.

+0

@ 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

+0

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. –

+0

@ 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

1

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; 

} 
+0

Wenn Sie das Perl-Skript hinzufügen, das Sie zu Ihrer Antwort verwendet haben, werde ich es abstimmen. :) –

+0

@ I'L'I: Ich habe hochgeladen der Code. Sorry für die Verspätung (hat einige andere Sachen repariert, die im _upgrade_ zu El Capitán brachen) – JAC

+0

Keine Sorge, froh, dass Sie das Drehbuch gepostet haben, hoffentlich wird es anderen helfen - Prost! –