¿Alguien ha usado el enlazador gold
antes? Para vincular un proyecto bastante grande, tuve que usar esto en lugar de GNU ld
, que arrojó algunos errores y no pudo vincular.
Cómo es ¿El gold
enlazador puede vincular proyectos grandes donde ld
falla? ¿Hay algún tipo de truco de memoria en alguna parte?
Comentarios
Respuesta
El enlazador gold
se diseñó como un enlazador específico de ELF, con la intención de producir un enlazador más fácil de mantener y más rápido que BFD ld
(el enlazador GNU binutils “tradicional”). Como efecto secundario, de hecho es capaz de vincular programas muy grandes que usan menos memoria que BFD ld
, presumiblemente porque hay menos capas de abstracción con las que lidiar y porque los datos del vinculador Las estructuras se asignan más directamente al formato ELF.
No estoy seguro de que haya mucha documentación que aborde específicamente las diferencias de diseño entre los dos enlazadores y su efecto en el uso de la memoria. Hay una muy interesante serie de artículos sobre enlazadores de Ian Lance Taylor, el autor de varios enlazadores GNU, que explica muchas de las decisiones de diseño que llevaron a gold
. Él escribe que
El enlazador en el que estoy trabajando ahora, llamado gold, en ser mi tercero. Es exclusivamente un enlazador ELF. Una vez más, el objetivo es la velocidad, en este caso más rápido que mi segundo enlazador. Ese enlazador se ha ralentizado significativamente a lo largo de los años al agregar soporte para ELF y para bibliotecas compartidas. Este soporte fue parcheado en lugar de diseñado.
(El segundo vinculador es BFD ld
).
Comentarios
- ¿El nombre ' gold ' provienen de leer ' ld ' como ' lead ', ¿y el oro es obviamente más valioso que el plomo?
- @Aganju No, es ' simplemente
go
con el prefijold
.
Respuesta
El Gold Linker se escribió para acelerar considerablemente el proceso de enlace. Según el autor del oro Ian Lance Taylor
Por el momento, el oro solo tiene uno ventaja significativa sobre el enlazador existente: es más rápido. En programas grandes de C ++, he medido que se ejecuta cinco veces más rápido.
Está comparando el rendimiento del enlazador dorado con el enlazador GNU tradicional. gold (a diferencia del enlazador GNU) no usa la biblioteca BFD para procesar archivos de objetos.
La limitación de Gold es que (a diferencia del enlazador GNU que puede procesar muchos tipos de archivos de objetos), solo puede enlazar archivos de objetos en formato ELF.
Con respecto a los problemas que enfrentó al usar GNU enlazador, aquí hay una respuesta interesante a una pregunta similar sobre SO de Michael Adam:
El enlazador de oro incluso encontró algunos problemas de dependencia en nuestro código, ya que parece ser más correcto que el clásico con respecto a algunos detalles. Ver, p. Ej. esta confirmación de Samba.
Responder
gold
frente a ld
comparativa
He publicado una prueba comparativa sintética concreta de ld frente a oro en: https://stackoverflow.com/questions/3476093/replacing-ld-with-gold-any-experience/53921263#53921263
Resumen de resultados: el oro fue de 2 a 3 veces más rápido que ld.
Esta ganancia de tiempo puede cambiar enormemente las reglas del juego en proyectos complejos de C ++ con plantillas fuera de control y generación de código, porque el paso de enlace involucra todos los archivos del proyecto y, a diferencia de la compilación, debe hacerse siempre, incluso si cambia solo un archivo .cpp.
Por lo tanto, un tiempo de enlace lento hace que el ciclo de desarrollo sea insoportable, y probablemente sea la razón principal Google invirtió recursos en eso. Imagínense las ganancias de esperar 10 segundos en lugar de 30 segundos por cada cambio trivial de archivo.
Las ganancias de tiempo del punto de referencia sintético también coincidieron con las ganancias reales que obtuve en un proyecto complejo del mundo real (gem5), como también se menciona en esa respuesta.
Respuesta
Hay tres enlazadores disponibles en los sistemas GNU / Linux modernos:
- ld , mantenido por GNU binutils,
- gold , mantenido por GNU binutils, «aún en prueba beta»,
- lld , desarrollado como parte del proyecto LLVM.
Para ver los puntos de referencia de velocidad, consulte: https://www.phoronix.com/scan.php?page=article&item=lld4-linux-tests&num=2 TL, DR: lld
es el más rápido, seguido de gold
, seguido de ld
Algunas fuentes dicen que el proyecto de oro ha sido estancado , y la estructura del paquete en Fedora refleja esto.
ld
haya sido eliminado por OoM.ld
puede consumir fácilmente muchos GB de RAM en proyectos grandes de C ++, mientras quegold
y especialmentelld
son mucho más eficientes en cuanto a recursos.ld
experimentó un error de memoria insuficiente, pero el enlazador dorado pudo enlazarlo