Quelquun a-t-il déjà utilisé léditeur de liens gold? Pour lier un projet assez volumineux, jai dû utiliser ceci par opposition au GNU ld, qui a généré quelques erreurs et na pas réussi à établir le lien.

Comment est léditeur de liens gold capable de lier de grands projets où ld échoue? Y a-t-il une sorte de tromperie de mémoire quelque part?

Commentaires

  • Quelles étaient les erreurs? Vous ' êtes probablement à court de mémoire et ld a été tué par OoM. ld peut facilement consommer de nombreux Go de RAM sur un gros projet C ++, tandis que gold et surtout lld sont beaucoup plus économes en ressources.
  • oui ld a rencontré une erreur de mémoire insuffisante, mais léditeur de liens Gold a pu le lier

Réponse

Léditeur de liens gold a été conçu comme un éditeur de liens spécifique à ELF, avec lintention de produire un éditeur de liens plus maintenable et plus rapide que BFD ld (léditeur de liens binutils GNU «traditionnel»). En effet, il est en effet capable de lier de très gros programmes utilisant moins de mémoire que BFD ld, probablement parce quil y a moins de couches dabstraction à traiter, et parce que les données de léditeur de liens les structures correspondent plus directement au format ELF.

Je ne suis pas sûr quil y ait beaucoup de documentation qui traite spécifiquement des différences de conception entre les deux éditeurs de liens, et leur effet sur lutilisation de la mémoire. Il existe une série darticles sur les liens très intéressante par Ian Lance Taylor, lauteur des différents linkers GNU, qui explique de nombreuses décisions de conception menant à gold. Il écrit que

Léditeur de liens sur lequel je travaille actuellement, appelé gold, va être mon troisième. Cest exclusivement un linker ELF. Encore une fois, lobjectif est la vitesse, dans ce cas étant plus rapide que mon deuxième éditeur de liens. Cet éditeur de liens a été considérablement ralenti au fil des ans en ajoutant le support pour ELF et pour les bibliothèques partagées. Cette prise en charge a été corrigée plutôt que conçue.

(Le deuxième éditeur de liens est BFD ld.)

Commentaires

  • serait le nom ' gold ' proviennent de la lecture de ' ld ' comme ' lead ', et lor est évidemment plus précieux que le plomb?
  • @Aganju Non, il ' est juste go préfixé à ld.

Réponse

Le gold linker a été écrit pour accélérer considérablement le processus de liaison. Selon lauteur de lor Ian Lance Taylor

Pour le moment, lor nen a quun avantage significatif par rapport à léditeur de liens existant: il est plus rapide. Sur les grands programmes C ++, je lai mesuré comme étant cinq fois plus rapide.

Il compare les performances de Gold Linker avec le linker GNU traditionnel. gold (contrairement à léditeur de liens GNU) nutilise pas la bibliothèque BFD pour traiter les fichiers objets.

La limitation de gold est que (contrairement à léditeur de liens GNU qui peut traiter de nombreux types de fichiers objets), il ne peut lier que des fichiers objets au format ELF.

Concernant les problèmes que vous rencontrez lors de lutilisation de GNU linker, voici une réponse intéressante à une question similaire sur SO de Michael Adam:

Léditeur de liens gold a même trouvé des problèmes de dépendance dans notre code, car il semble être plus correct que le classique en ce qui concerne certains détails. Voir, par exemple ce commit Samba.

Réponse

gold vs ld benchmark

Jai publié un benchmark synthétique concret de LD vs Gold à ladresse: https://stackoverflow.com/questions/3476093/replacing-ld-with-gold-any-experience/53921263#53921263

Résumé de résultats: lor était de 2 à 3 fois plus rapide que ld.

Ce gain de temps peut changer énormément la donne sur des projets C ++ complexes avec des modèles et une génération de code incontrôlables, car létape de liaison implique tous les fichiers du projet, et contrairement à la compilation, cela doit toujours être fait, même si vous ne modifiez quun seul fichier .cpp.

Donc, un temps de liaison lent rend le cycle de développement insupportable, et est probablement la raison principale Google y a plongé des ressources. Imaginez simplement les gains dattendre 10 secondes au lieu de 30 secondes pour chaque changement de fichier trivial.

Les gains de temps du benchmark synthétique étaient également en accord avec les gains réels que javais sur un projet complexe du monde réel (gem5), comme mentionné également dans cette réponse.

Réponse

Trois liens sont disponibles sur les systèmes GNU / Linux modernes:

  • ld , maintenu par GNU binutils,
  • gold , maintenu par GNU binutils, « toujours en beta test »,
  • lld , développé dans le cadre du projet LLVM.

Pour les tests de vitesse, voir: https://www.phoronix.com/scan.php?page=article&item=lld4-linux-tests&num=2 TL, DR: lld est le plus rapide, suivi de gold, suivi de ld

Selon certaines sources, le projet aurifère a été stagnant , et la structure du paquet dans Fedora reflète cela.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *