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


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

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

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

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

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

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

7 65

7 ответов:

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

опыт:

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

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

поскольку мне потребовалось некоторое время, чтобы узнать, как выборочно использовать 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 и таким образом использует сценарий клея вместо системы-default ld.

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

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

или

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

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

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

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

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

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

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

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