0 votes

GCC 4.7 (via brew) continue d'inclure à partir de "/usr/include/c++/4.2.1"

Celui-ci me rend fou :

J'ai besoin d'utiliser beaucoup de choses qui ne sont tout simplement pas compilées avec les compilateurs clang/llvm standard qui viennent avec Xcode 5 (sur Mac OS X 10.8), donc j'ai décidé d'installer gcc47 via brew.

Tout s'est bien passé mais quand j'essaie de compiler les choses, j'obtiens plusieurs messages d'erreur et j'ai découvert que certaines inclusions viennent toujours de "/usr/include/c++/4.2.1", ce qui est vraiment étrange.

Est-ce que quelqu'un pourrait m'expliquer comment le configurer de manière propre ?

Voici les étapes que j'ai suivies :

  • brew update
  • brew install gcc47
  • alias gcc='gcc-4.7'

brew m'a averti que je dois configurer LDFLAGS et CPPFLAGS, citant (résumé) :

  Ces formules sont exclusives à la programmation Keg, donc elles n'ont pas été liées à /usr/local.
    Conflits avec gmp, mpfr, libmpc, ppl dans le répertoire principal.

    En général, cela n'a pas de conséquences pour vous. Si vous construisez votre
    propre logiciel et qu'il nécessite ces formules, vous devrez ajouter à vos
    variables de construction :
        LDFLAGS : -L/usr/local/opt/gmp4/lib
        CPPFLAGS : -I/usr/local/opt/gmp4/include

        LDFLAGS : -L/usr/local/opt/mpfr2/lib
        CPPFLAGS : -I/usr/local/opt/mpfr2/include

        LDFLAGS : -L/usr/local/opt/libmpc08/lib
        CPPFLAGS : -I/usr/local/opt/libmpc08/include

        LDFLAGS : -L/usr/local/opt/ppl011/lib
        CPPFLAGS : -I/usr/local/opt/ppl011/include

        LDFLAGS : -L/usr/local/opt/cloog-ppl015/lib
        CPPFLAGS : -I/usr/local/opt/cloog-ppl015/include

Donc exporter LDFLAGS et CPPFLAGS via

        export LDFLAGS="${LDFLAGS} -L/usr/local/opt/gmp4/lib -L/usr/local/opt/mpfr2/lib -L/usr/local/opt/libmpc08/lib -L/usr/local/opt/ppl011/lib -L/usr/local/opt/cloog-ppl015/lib"

        export CPPFLAGS="${CPPFLAGS} -I/usr/local/opt/gmp4/include -I/usr/local/opt/mpfr2/include -I/usr/local/opt/libmpc08/include -I/usr/local/opt/ppl011/include -I/usr/local/opt/cloog-ppl015/include"

devrait résoudre le problème (je croyais).

Mais cela ne fonctionne pas. Je continue à recevoir des messages comme :

/usr/include/c++/4.2.1/bits/stl_vector.h:600:7: note: must qualify identifier to find this declaration in dependent base class push_back(const value_type& __x) ^

et je ne comprends tout simplement pas pourquoi ?

0 votes

Où le compilateur trouverait-il l'inclusion du vecteur - le "not" est seulement pour ces 5 bibliothèques et non pas pour les bibliothèques standard - vous devez le définir explicitement

1 votes

@Mark Ah ok, donc il suffit d'ajouter le chemin des bibliothèques standards/incluses à LDFLAGS et CPPFLAGS ?

0 votes

Modifiez le makefile pour pointer vers le gcc Homebrew, ne créez pas d'alias.

1voto

yoliho Points 340

Cette note fait référence aux 4 bibliothèques gmp, mpfr, libmpc, ppl et je pense signifie que si vous les utilisez, elles doivent être placées avant le chemin de recherche standard.

Votre problème est de savoir où le compilateur recherche les en-têtes de bibliothèque standard (et plus tard les bibliothèques). gcc est par défaut /usr/include qui est installé pour les compilateurs Apple et qui est redirigé par version vers le chemin que vous voyez.

Vous devez définir explicitement les chemins à rechercher en premier dans le chemin des compilateurs Homebrew.

0 votes

Voulez-vous dire définir LDFLAGS et CPPFLAGS ou y a-t-il d'autres variables que je devrais vérifier ?

0 votes

Essayez d'abord de créer une application simple Hello World - assurez-vous que cela fonctionne - sinon nous pourrions avoir besoin de voir l'intégralité du makefile - Êtes-vous sûr que vous ne pouvez pas utiliser clang - cela vaut peut-être la peine de poser la question sur SO si vous avez un problème particulier

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X