gcc linker

¿Puede gcc usar múltiples núcleos al enlazar?



linker (3)

La opción -j te refieres es manejada por make not gcc .

El uso de make -jn pregunta por make para ejecutar las acciones en el Makefile con múltiples procesos paralelos (Reemplace n con un número. En el caso de make -j 2 es el proceso 2 ).

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

Entonces, al compilar toneladas de archivos fuente con GCC, se puede usar -j para usar todos los núcleos disponibles. Pero ¿qué pasa con el enlazador? ¿Existe una opción similar para acelerar la vinculación o GCC no admite subprocesos múltiples? En algunos proyectos más grandes realmente puede tomar un tiempo ... (¡y odio esperar!)

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


Try 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 oro fue hacer un enlazador que sea más rápido que el enlazador GNU, especialmente para aplicaciones grandes codificadas en C ++.

Debo admitir que todavía no lo he probado, pero se menciona en la página web del proyecto WebKitGTK .

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

Más importante aún, vea el trabajo sobre el enlace incremental / paralelo / concurrente de Sander Mathijs van Veen titulado Enlace simultáneo con el enlazador de oro GNU y la bibliografía que contiene.


lld , el enlazador desarrollado por el proyecto LLVM, usará múltiples núcleos por defecto. También he encontrado que es aproximadamente 2 -Wl,--threads -Wl,--thread-count,xxx más rápido que el oro que se ejecuta con varios subprocesos ( -Wl,--threads -Wl,--thread-count,xxx )