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