0 votos

GCC 4.7 (vía brew) sigue incluyendo desde "/usr/include/c++/4.2.1"

Este me está volviendo loco:

Necesito usar muchas cosas que simplemente no compilan con los compiladores estándar clang/llvm que vienen con Xcode 5 (en Mac OS X 10.8), así que decidí instalar gcc47 vía brew.

Todo ha ido bien, pero cuando intento compilar las cosas, me salen varios mensajes de error y he descubierto que algunos includes siguen viniendo de "/usr/include/c++/4.2.1", lo cual es realmente extraño.

¿Alguien puede explicarme cómo configurarlo de forma limpia?

Estos son los pasos que estaba haciendo:

  • actualización de la cerveza
  • brew install gcc47
  • alias gcc='gcc-4.7'

brew me advirtió que tengo que configurar LDFLAGS y CPPFLAGS , citando (resumidamente):

  This formulas are keg-only: so they were not symlinked into /usr/local.
    Conflicts with gmp, mpfr, libmpc, ppl in main repository.

    Generally there are no consequences of this for you. If you build your
    own software and it requires these formulas, you'll need to add to your
    build variables:
        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

Así que la exportación LDFLAGS y CPPFLAGS a través de

        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"

debería ser suficiente (eso creía).

Pero no es así. Sigo recibiendo mensajes como:

/usr/include/c++/4.2.1/bits/stl_vector.h:600:7: note: must qualify el identificador para encontrar esta declaración en la clase base dependiente push_back(const value_type& __x) ^

y simplemente no entiendo por qué?

1voto

yoliho Puntos 340

Esa nota solo se refiere a las 4 bibliotecas gmp, mpfr, libmpc, ppl y creo que quiere decir que si las usas tienen que estar antes de la ruta de búsqueda estándar.

Tu problema es dónde busca el compilador las cabeceras de las bibliotecas estándar (y las bibliotecas posteriores). gcc va por defecto a /usr/include que se instala para los compiladores de Apple y que se redirige por versión a la ruta que ves.

Es necesario establecer explícitamente las rutas para buscar en la ruta de los compiladores hombrew primero

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X