Замена ld на золото - есть опыт?
кто-нибудь пробовал использовать gold
вместо ld
?
gold
обещания чтобы быть намного быстрее, чем ld
, поэтому он может помочь ускорить циклы тестирования для больших приложений C++, но может ли он использоваться в качестве замены LD?
можете gcc
/g++
прямой вызов gold
.?
есть ли какие-либо ошибки или проблемы?
хотя gold
является частью GNU binutils с тех пор, как я нашел почти никаких " историй успеха "или даже" Howtos " в Интернете.
(обновление: добавлены ссылки на золото и запись в блоге, объясняя это)
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 .
- сделайте каталог, где вы можете поместить золотой клей скрипт. Я использую
~/bin/gold/
.поместите туда следующий скрипт клея и назовите его
~/bin/gold/ld
:#!/bin/bash gold "$@"
очевидно, что сделать это исполняемая,
chmod a+x ~/bin/gold/ld
.измените ваши звонки на
gcc
доgcc -B$HOME/bin/gold
что заставляет gcc искать в данном каталоге вспомогательные программы, такие какld
и таким образом использует сценарий клея вместо системы-defaultld
.
вы можете связать
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