2009-11-12 12 views
20

De acuerdo con el gcc build instructions puede construir binutils al mismo tiempo que compila gcc (así como gmp, mpc, etc.).¿Receta para compilar binutils y gcc juntos?

Esto es lo que dice la página:

If you also intend to build binutils (either to upgrade an existing installation or for use in place of the corresponding tools of your OS), unpack the binutils distribution either in the same directory or a separate one. In the latter case, add symbolic links to any components of the binutils you intend to build alongside the compiler (bfd, binutils, gas, gprof, ld, opcodes, ...) to the directory containing the GCC sources.

Likewise the GMP, MPFR and MPC libraries can be automatically built together with GCC. Unpack the GMP, MPFR and/or MPC source distributions in the directory containing the GCC sources and rename their directories to gmp, mpfr and mpc, respectively (or use symbolic links with the same name).

Esto funciona muy bien para GMP, mpc, MPFR, pero me parece que no puede conseguir que construir todos binutils. Tampoco puedo encontrar la manera de conseguirlo para construir el nuevo vinculador de oro de binutils. Las versiones en cuestión son gcc-4.4.2 y binutils-2.20.

Una instrucción paso a paso sería genial (para mí y para otros que también se encuentran con este problema).

+0

También le puede interesar ver cómo [Linux From Scratch] (http://www.linuxfromscratch.org/lfs/view/development/index.html) lo hace. Utiliza un bootstrap de 2 pasos para binutils, GCC y glibc (otra dependencia importante de GCC). –

Respuesta

0

Siempre construyo todo por separado. Después de que se ha construido y ha instalado binutils, gcc debe construir bien, siempre y cuando le dan cada script de configuración y las mismas --target--prefix opciones:

binutils:

$ ./configure --target=XYZ --prefix=/abc/def 
$ make all install 

continuación, agregue la ruta (si es necesario):

$ export PATH="$PATH:/abc/def/bin" 

y construir gcc:

$ ./configure --target=XYZ --prefix=/abc/def 
$ make all-gcc install-gcc 

Luego compila tu libc y el resto de gcc si es necesario (¡quizás también un depurador!).

+2

Gracias, pero esa no es la pregunta que estoy haciendo. Sé cómo construirlos por separado. Los documentos indican que puedes construirlos como una compilación única. Eso es lo que estoy buscando. – bdbaddog

+1

¿Por qué molestarse? Si puedes hacerlos por separado y funcionan, ¿por qué soportar el dolor de tratar de unirlos? –

+2

Él no preguntó sobre la fidelidad de esta estrategia, solo cómo hacerlo. –

3

Lo que quiere hacer es llamar una compilación de "árbol combinado" o "binutils en árbol". Puede encontrar documentación sobre cómo proceder here y there.

+1

Y: https: // gcc.gnu.org/simtest-howto.html –

21

Esto todavía debería ser compatible con OK, ya que se usa comúnmente para construir compiladores cruzados.

De hecho, acabo de hacer esto con gcc 4.6.0 y binutils 2,21 (con GMP, MPC y MPFR en versiones apropiadas), y la siguiente parecía funcionar bien:

  • Obtenga toda la archivos de las cosas que vas a construir (gcc-4.6.0.tar.bz2, binutils-2.21.tar.bz2, etc.) en un nuevo directorio, por ejemplo src
  • a todos Un-tar en este directorio, por lo que terminan con gcc-4.6.0/binutils-2.21/gmp-5.0.2/ y más sentados uno junto al otro

    tar jxvf gcc-4.6.0.tar.bz2 
    ... (unpack others here, watch file lists scroll past) 
    
  • cd gcc-4.6.0 y enlace simbólico del GMP, MPC y directorios MPFR sin sus números de versión en los enlaces, e.g:

    ln -s ../gmp-5.0.2 gmp 
    
  • Ahora enlace simbólico desde el directorio binutils que no existe en el directorio gcc, así que cualquier cosa que ya existe tendrá prioridad, pero las herramientas binutils buscarán ser visibles a la construcción:

    for file in ../binutils-2.21/* ; do ln -s "${file}" ; done 
    
  • Cambie un directorio y cree un directorio de compilación para compilar todo esto por separado a las fuentes (este siempre fue el método recomendado, y tiende a ser más confiable que compilar dentro del directorio origen):

    cd .. ; mkdir build 
    
  • En este punto, usted debe tener un conjunto de directorios y enlaces que se ve algo como esto:

    binutils-2.21/ 
    build/ 
    gcc-4.6.0/ 
        gmp -> ../gmp-5.0.2 
        mpc -> ../mpc-0.9 
        mpfr -> ../mpfr-3.0.1 
        bfd -> ../binutils-2.21/bfd 
        binutils -> ../binutils-2.21/binutils 
        gas -> ../binutils-2.21/gas 
        ... (lots more symlinks for binutils here, plus existing gcc stuff) 
    gmp-5.0.2/ 
    mpc-0.9/ 
    mpfr-3.0.1/ 
    
  • Configurar la totalidad del lote de esta dir, con lo que las opciones que necesita para pasar a configurar:

    ../gcc-4.6.0/configure --prefix=/foo/bar --enable-languages=c,c++,ada 
    
  • Generar, espera, instalación (es probable que desee utilizar más o menos make -j4 aquí para obtener algunas versiones en paralelo, ya que va a tomar un tiempo):

    make -j4 ; make install 
    

Agregar el destino a su ruta si no está ya (y tal vez el directorio lib a LD_LIBRARY_PATH si esto está fuera de los especificados en /etc/ld.so.conf, como se menciona en los mensajes sobre la instalación de bibliotecas durante el paso de make install), y todo debería estar funcionando con esta nueva versión.

Es probablemente la pena comprobar que está utilizando esta versión instalada una vez que haya abierto un nuevo shell, con:

`which gcc` 

y

`which as` 

..as así como que la versión es como se espera con:

`gcc --version` 

y

`as --version` 

..as así como las pruebas (por supuesto) que la versión instalada construye ejecutables finas con algunos ejemplos sencillos antes de dejarlo suelto en su base de código :)

Editar: Los comentarios que siguen contienen algunas conjuntos de versiones que se sabe que funcionan juntas. No todas las combinaciones funcionarán, por lo que es posible que deba realizar algunas pruebas y errores para diferentes combinaciones de las mencionadas.

+2

Una nota para mí y para los demás: Hacer esto con gcc 4.7.1 requiere una versión anterior de mpfr que la versión más reciente. He usado mpfr-2.4.2 con éxito, pero cualquier cosa> 3.0 no funcionó para mí. (Lista de todos los componentes: binutils-2.22, gcc-4.7.1, gmp-5.0.5, mpc-1.0, mpfr-2.4.2) –

+2

Otra nota: Hacer esto con gcc 4.7.2, con binutils-2.22 y contrib/download_prerequisites para gmp, mpc, mpfr; la receta funciona, pero gcc no puede compilar con -flto, lo que da como resultado: collect2: error fatal: no se puede encontrar 'ld'. Para rectificar eso, crea un enlace simbólico ld -> ld-new en tu ... directorio prefijo/bin. –

+0

Si desea habilitar las optimizaciones de 'grafito' (consulte http://gcc.gnu.org/wiki/Graphite), también necesitará las bibliotecas ISL y CLooG, y podrá vincularlas de la misma manera que otras bibliotecas (mpfr, mpc, etc.). Actualizaré las instrucciones para incluir esto en breve. –

Cuestiones relacionadas