GCC 4.7 (a través de brew) sigue incluyendo desde "/usr/include/c++/4.2.1"

0

Este me está volviendo loco:

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

Todo salió bien, pero cuando trato de compilar cosas, recibo varios mensajes de error y descubrí que algunos incluidos aún vienen de "/usr/include/c++/4.2.1", lo cual es realmente extraño.

¿Puede alguien explicarme cómo configurarlo de una manera limpia?

Estos son los pasos que estaba haciendo:

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

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

  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 exportamos 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 hacer el truco (pensé).

Pero no lo hace. Sigo recibiendo mensajes como:

  

/usr/include/c++/4.2.1/bits/stl_vector.h:600:7: nota: debe calificar   Identificador para encontrar esta declaración en la clase base dependiente.         push_back (const value_type & __x)         ^

y simplemente no entiendo por qué?

    
pregunta tamasgal 27.11.2013 - 16:48

1 respuesta

1

esa nota solo hace referencia a las 4 bibliotecas gmp, mpfr, libmpc, ppl y creo que significa que si las usas deben estar antes de la ruta de búsqueda estándar.

Su problema es dónde está el compilador en busca de encabezados de biblioteca estándar (y bibliotecas posteriores). gcc utiliza de manera predeterminada / usr / include, que se instala para los compiladores de Apple y que se redirige por versión a la ruta que ve.

Primero debe establecer explícitamente las rutas para que aparezcan en la ruta de compiladores de hombrew

    
respondido por el Mark 27.11.2013 - 17:51

Lea otras preguntas en las etiquetas