J'ai récemment installé à l' gcc 4.8
aide brew
sur OSX 10.7.5 (Lion)
. Je peux maintenant compiler en utilisant gcc 4.8
en utilisant
g++-4.8 some_file.c
ou en utilisant la valeur gcc 4.2
par défaut en utilisant
g++ some_file.c
Je veux utiliser gcc 4.8
comme compilateur par défaut pour Xcode
et si je tape gcc
sur le terminal. Je suppose que je dois modifier les gcc-related
liens à l'intérieur dirname $(which gcc)
.
Quand je fais
ls -al $(dirname $(which gcc)) | grep 'gcc\|g++\|c++'
J'obtiens ce qui suit:
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
Quand je cours: which gcc-4.8
je reçois /usr/local/bin/gcc-4.8
.
Les étapes pour y parvenir seraient très utiles.
S'il te plaît et merci.
clang 3.3
l'équivalent degcc 4.8
? Je crois que je le peuxbrew install
aussi.Réponses:
En supposant que vous utilisez bash (c'est la valeur par défaut), vous pouvez ajouter / usr / local / bin comme priorité absolue dans PATH comme ceci:
Cela garantira que / usr / local / bin est vérifié avant toutes les autres zones de votre chemin. Il suffit ensuite de démarrer une nouvelle session de terminal pour charger la nouvelle variable.
Une autre façon de procéder:
la source
usr/local/bin
.echo $PATH
révèle: / opt / local / bin: / opt / local / sbin: / opt / local / include: / 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
pour apparaître en premier dansPATH
- ce qui n'a eu aucun effet - appelergcc
regarde toujours.gcc 4.2
J'ai ensuite créé manuellement les liens symboliques, mais lorsque j'ouvre une nouvelle fenêtre de terminal etg++
ou (cc|c++|gcc
), tous ne sont pas trouvés. Étrange. Merci pour votre aide/usr/bin
n'importe quel Unix (qui est MacOS X)… à moins que vous ne soyez un spécialiste travaillant sur les sources d'une nouvelle version de la prochaine version Unix ☺.Merci à tous pour votre aide. J'ai fini par créer des alias
~/.bash_profile
comme suit:La réponse de Lynken est très utile, mais je l'ai adaptée avec des alias car c'est plus facile pour moi de l'annuler si nécessaire.
Plus précisément, si
PATH
est défini de telle sorte que/usr/local/bin
(où brew place le liengcc 4.8
) apparaisse avant apparaisse/usr/bin
(oùgcc
est lié par défaut), la création de liens comme Lyken l'a suggéré/usr/local/bin
devrait théoriquement fonctionner pour moi. En pratique, ce n'est pas le cas pour une raison quelconque - échouer avec une erreur de l'éditeur de liens et les alias contourner cette erreur sans que je doive également résoudre ce problème.L'autre avantage des alias est que je n'ai pas à lier ce que je veux que l'homebrew gère et que je ne doive pas rivaliser avec cet outil pour lequel la version de gcc est liée
/usr/local
la source
/usr/local/bin
. Vous pouvez également avoir d'autres binaires installés et masqués en raison du mauvais positionnement de/usr/local/bin
votre PATH. Veuillez considérer une fois de plus ma réponse, elle attaque votre vrai problème une fois, correctement et pour toujours.PATH
et mis/usr/local/bin
avant tout. Je concède que votre déclaration est correcte et que je devais la modifierPATH
, mais (dans mon cas - c'est-à-dire l'brew
installation par défaut degcc 4.8
) je n'appellerai toujours pasgcc 4.8
par défaut lorsque j'appelleraigcc
car il n'y a pas de lien symbolique entre les deux par défaut. J'ai dû le créer manuellement comme je l'ai fait ci-dessus.gcc
directement à partir du terminal. Si vous utilisez un makefile,clang
est toujours utilisé, je n'ai trouvé ce problème que lorsque vous utilisez une option de compilation qui n'est disponible que dansgcc
.J'utilise pour gcc-4.8:
et retour à apple gcc:
ou le mettre dans un fichier puis:
source <file>
la source
Supposons que votre véritable initialisation du shell soit terminée
~/.profile
, vous devrez alors la modifier de manière à placer en/usr/local/bin
avant de tout autre composant PATH où se trouventgcc
tous les binaires associés.Voici la façon d'effectuer cette modification propre:
Attention: si votre
~/.profile
est déjà structuré, ce script shell devra être réglé manuellement pour correspondre à la bonne définition de PATH au bon endroit.la source
PATH
sorte que cela/usr/local/bin
se voit en premier. Cela me sauvera probablement des maux de tête à l'avenir. J'aimerais pouvoir vous attribuer +1. Mon problème est quegcc
c'est toujours lié àgcc 4.2
et nongcc 4.8
parce qu'il n'y a pas de lien symbolique pourgcc -> gcc-4.8
dans/usr/local/bin
. J'aurais encore besoin d'aliasgcc
commegcc-4.8
dans~/.profile
ou symlink (ln -s gcc-4.8 gcc
)/usr/local/bin
après la misePATH
à jour avec votre script. Vous?brew
ne pas avoir ajouté les bons liens symboliques. Avez-vous lu cette réponse sur le même sujet: apple.stackexchange.com/a/38247/22003 ?Il est supposé que la création d'alias ou la liaison à différents binaires gcc leur fera utiliser leur propre inclusion avant le dossier d'inclusion système par défaut.
la source