Замена ld на gold - есть опыт?

кто-нибудь пробовал использовать gold вместо ld?

gold обещания чтобы быть намного быстрее, чем ld, поэтому это может помочь ускорить циклы тестирования для больших приложений на C++, но можно ли использовать его в качестве замены LD?

Can gcc/g++ прямой вызов gold.?

есть ли какие-либо ошибки или проблемы?

хотя gold является частью GNU binutils с тех пор, как я нашел почти нет " историй успеха "или даже" Howtos " в Интернете.

(обновление: добавлены ссылки на золото и запись в блоге, объясняя это)

7 ответов


на данный момент он компилирует большие проекты на Ubuntu 10.04. Здесь вы можете легко установить и интегрировать его с (Если вы удалите этот пакет, вы получите свой старый ld). Gcc будет автоматически использовать золото.

опыт:

  • золото не ищет в /usr/local/lib
  • gold не предполагает такие библиотеки, как pthread или rt, пришлось добавлять их вручную
  • это быстрее и требует меньше памяти (позже это важно на больших проектах C++ с большим количеством boost и т. д.)

что не работает: он не может компилировать материал ядра и, следовательно, никаких модулей ядра. Ubuntu делает это автоматически через DKMS, если он обновляет проприетарные драйверы, такие как fglrx. Это не удается с ld-gold (вы должны удалить золото, перезапустить DKMS, переустановить ld-gold.


поскольку мне потребовалось некоторое время, чтобы узнать, как выборочно использовать золото (т. е. не общесистемное использование символической ссылки), я опубликую решение здесь. Он основан наhttp://code.google.com/p/chromium/wiki/LinuxFasterBuilds#Linking_using_gold .

  1. сделать каталог, где вы можете поместить золотой клей сценарий. Я использую ~/bin/gold/.
  2. поместите туда следующий скрипт клея и назовите его ~/bin/gold/ld:

    #!/bin/bash
    gold "$@"
    

    очевидно, что сделать это исполняемый файл chmod a+x ~/bin/gold/ld.

  3. измените вызовы на gcc до gcc -B$HOME/bin/gold что заставляет gcc искать в данном каталоге вспомогательные программы, такие как ld и, таким образом, использует скрипт клея вместо system-default ld.


вы можете связать ld to gold (в локальном двоичном каталоге, если у вас есть ld установлен, чтобы избежать перезаписи):

ln -s `which gold` ~/bin/ld

или

ln -s `which gold` /usr/local/bin/ld

может gcc / g++ напрямую вызывать gold.?

просто чтобы дополнить ответы: существует опция gcc -fuse-ld=gold (см. ССЗ док). Хотя, AFAIK, можно настроить gcc во время сборки таким образом, что опция не будет иметь никакого эффекта.


как разработчик Samba, я использую gold linker почти исключительно на Ubuntu, Debian и Fedora уже несколько лет. Моя оценка:

  • золото во много раз (как будто в 5-10 раз) быстрее классической компоновки.
  • первоначально было несколько проблем, но они ушли примерно с Ubuntu 12.04.
  • золотой компоновщик даже нашел некоторые проблемы с зависимостями в нашем коде, так как он кажется более правильным, чем классический с уважение к некоторым деталям. См., например это Samba commit.

Я не использовал золото выборочно, но использовал символические ссылки или альтернативный механизм, если его предоставляет дистрибутив.


некоторые проекты кажутся несовместимыми с золотом, из-за некоторых несовместимых различий между ЛД и золото. Пример: OpenFOAM, см. http://www.openfoam.org/mantisbt/view.php?id=685 .


DragonFlyBSD переключился на золото в качестве компоновщика по умолчанию. Таким образом, он, кажется, готов к различным инструментам.
Новые подробности: http://phoronix.com/scan.php?page=news_item&px=DragonFlyBSD-Gold-Linker