Alguien ha intentado utilizar oro
en lugar de ld
?
gold
promesas a ser mucho más rápido que ld
, lo que puede ayudar a acelerar los ciclos de la prueba para grandes aplicaciones de C++, pero también puede ser utilizado como sustituto para ld?
Puede gcc
/g++
llamar directamente a gold
.?
Hay ningún saber de los errores o problemas?
Aunque gold
es parte de la GNU binutils desde hace un tiempo, he encontrado casi nada de «historias de éxito» o incluso «Tutoriales» en la Web.
(Actualización: añadidos enlaces para el oro y la entrada en el blog explicando que)
En el momento de la compilación de los proyectos más grandes en Ubuntu 10.04. Aquí usted puede instalar e integrar fácilmente con la
binutils-gold
paquete (si se quita ese paquete, usted consigue su antiguold
). Gcc automáticamente el uso del oro, a continuación,.Algunas experiencias:
/usr/local/lib
Lo que no funciona: no Se puede compilar el kernel de cosas y por lo tanto no hay módulos del kernel. Ubuntu lo hace automáticamente a través de DKMS, si se actualiza los controladores propietarios como fglrx. Esta falla con
ld-gold
(usted tiene que quitar de oro, reinicie DKMS, vuelva a instalarld-gold
.ld
es tan codiciosos sobre ella.Como me tomó un poco de tiempo para averiguar cómo usar de manera selectiva de oro (es decir, no todo el sistema mediante un enlace simbólico), voy a publicar aquí la solución. Se basa en http://code.google.com/p/chromium/wiki/LinuxFasterBuilds#Linking_using_gold .
~/bin/gold/
.Poner el siguiente pegamento script allí y el nombre de
~/bin/gold/ld
:Obviamente, hacerlo ejecutable,
chmod a+x ~/bin/gold/ld
.Cambiar sus llamadas a
gcc
agcc -B$HOME/bin/gold
que hace gcc buscar en el directorio de programas de ayuda comold
y por lo tanto utiliza el pegamento de la secuencia de comandos en lugar de el sistema por defectold
.gold
en elPATH
. Para un enlace simbólico, tendría que apuntar a la ruta de acceso completa.Sólo para complementar las respuestas: hay una gcc opción
-fuse-ld=gold
(ver gcc doc). Aunque, AFAIK, es posible configurar gcc durante el construir de una manera que la opción no tendrá ningún efecto.-fuse-ld=gold
no es completa. Si usted tiene que utilizar-Wl,-fuse-ld=gold
como se utiliza en el enlace de tiempo.Como una Samba desarrollador, he estado usando el oro enlazador casi exclusivamente en Ubuntu, Debian y Fedora desde hace ya varios años. Mi valoración:
No he utilizado el oro de forma selectiva, pero que han sido el uso de enlaces simbólicos o las alternativas mecanismo, si la distribución se la proporciona.
Puede vincular
ld
agold
(en un local de directorio de binarios si usted tieneld
instalado para evitar la sobreescritura):o
Algunos proyectos parecen ser incompatibles con el oro, debido a algunas diferencias incompatibles entre ld y oro. Ejemplo: OpenFOAM, ver http://www.openfoam.org/mantisbt/view.php?id=685 .
Mínimo sintético referencia
Resultado: medalla de oro fue acerca de 2x a 3x más rápido para todos los valores que he probado.
generar objetos
GitHub aguas arriba.
Dado una entrada del tipo:
Esto genera un principal que hace:
donde cada función está definida en un aparte
f_n.c
archivo, y añaden_int_file_is
vecesn_ints_per_file
extern int:Esto conduce a:
traslados en el enlace.
Luego he comparado:
para la entrada de varios tripletes, que dio:
Algunos de los límites que he estado tratando de mitigar:
Probado en Ubuntu 18.10, GCC 8.2.0, Lenovo ThinkPad P51 portátil, Intel Core i7-7820HQ de la CPU (4 núcleos /8 hilos), 2x Samsung M471A2K43BB1-CRC RAM (2x 16GiB), Samsung MZVLB512HAJQ-000L7 SSD (3.000 MB/s).
También he observado un 2x en la generación de depuración de gem5: https://gem5.googlesource.com/public/gem5/+/fafe4e80b76e93e3d0d05797904c19928587f5b5
DragonFlyBSD cambié al oro como valor predeterminado enlazador. Por lo que parece estar listo para una gran variedad de herramientas.
Más detalles:
http://phoronix.com/scan.php?page=news_item&px=DragonFlyBSD-Oro-Vinculador