2011-02-28 45 views
24

Por lo tanto, al compilar toneladas de archivos fuente con GCC se puede usar -j para usar todos los núcleos disponibles. Pero, ¿y el enlazador? ¿Existe una opción similar para acelerar la vinculación o GCC no es compatible con multi-threading? En algunos proyectos más grandes realmente puede tomar un tiempo ... (... y odio esperar!)¿Puede gcc usar múltiples núcleos al vincular?

Edit: Gracias por señalar que -j es una opción para make y no para gcc/g ++. ¡Pero esto no responde mi pregunta! Me gustaría saber si gcc puede usar multi threading mientras que vinculando un programa!

+0

Puede estar interesado en distcc http://distcc.org/ que le permitirá distribuir compilaciones en varias máquinas en una red. –

+3

@Jon: ¡No me interesa la compilación paralela, sino la vinculación paralela! – Danvil

+5

¿Por qué esta pregunta fue downvoted? Dios sabe que el enlazador GNU es lento y encontrar la forma de hacer que enlace más rápido solo mejorará el ciclo de compilación. – greatwolf

Respuesta

1

La opción -j a la que se refiere es manejada por make no gcc.

Usando make -j n pide make para ejecutar las acciones en el Makefile a los procesos paralela múltiple (Reemplazar n con un número. En el caso de make -j 2 es 2 proceso).

Make manejará bien la mayoría de las tareas de sincronización al hacer compilaciones paralelas.

4

Probar gold, que fue desarrollado por Ian Lance Taylor et al. de Google y lanzado como parte del paquete binutils de GNU.

De Wikipedia:

La motivación para escribir el oro fue para hacer un enlazador que es más rápido que el enlazador de GNU, especialmente para grandes aplicaciones codificadas en C++

Debo admitir que Haven' Lo intenté todavía pero se menciona en la página web WebKitGTK project.

Para obtener más información, consulte un artículo escrito por el autor de oro: A New ELF Linker.

Más importante aún, vea el trabajo sobre enlace incremental/paralelo/concurrente de Sander Mathijs van Veen titulado Concurrent Linking with the GNU Gold Linker y la bibliografía en el mismo.

2

lld, el enlazador desarrollado por el proyecto LLVM, utilizará varios núcleos de forma predeterminada. También descubrí que es aproximadamente 2 veces más rápido que el oro que se ejecuta con varios hilos (-Wl,--threads -Wl,--thread-count,xxx)

Cuestiones relacionadas