Вход:  Пароль:  
FreeSource: AltLinux/Sisyphus/devel/UpStream/AsNeeded ...
Free Source | Каталог | Изменения | НовыеКомментарии | Пользователи | Регистрация |
Эта страница была перенесена на altlinux.org. Текст на freesource.info заморожен.

ld и --as-needed

Проблема

Многие upstream makefiles приводят к избыточной линковке библиотек и бинарников с библиотеками, которые ими не используются напрямую или вообще. Множественные обсуждения, порой баталии, по поводу необходимости борьбы с такими случаями можно найти в архивах по словам “libdb4” или “as-needed”, как правило, с участием Dmitry V. Levin; см. тж. это письмо Andrei Bulava, или объяснение про LDFLAGS vs LDADD; вот обзор ещё одной типичной возникшей проблемы и, наконец, развёрнутая аргументация с демонстрацией 5% выигрыша по времени загрузки спорного gdm.


С марта 2006 в ALT Linux наблюдается ld -Wl,--as-needed по умолчанию.

Решение

Исправить сборку так, чтобы библиотеки (-lsomelib) шли в строке запуска линкера после объектных файлов (somemodule.o). Пример «на пальцах» можно найти тут.


В случае использования проектом autotools доковыривание до источника проблемы в Makefile.am может быть не совсем интересным занятием, но в моих (mike@) случаях вполне успешным. В случае неиспользования и отсутствия в самописном Makefile строчки линковки в явном виде — см. здесь или сразу info make в области implicit rules (damir@) и s/LDFLAGS/LDLIBS/.


raorn@ также предлагает (**cleanup** by mike@):


Смысл этой странной конструкции состоит в том, что все ссылки на библиотеки (-lfoo) должны помещаться в переменнуюю LIBS, а не LDFLAGS, как это иногда ошибочно делается.


Однако есть мнение, что в такои виде эту конструкцию использовать вредно. Лучше вызвать subst вручную, проверить результат и сделать патч, который уже прикладывать в spec-файле.


Если получилось — хорошо бы отослать разработчикам исправление (см. тж. этот комментарий и ещё один аргумент для апстрима). Также (c) damir@:


Объезд

Если же это изменение поведения по умолчанию привело к слишком дорогим/странным в оперативной починке поломкам, возможен откат на старое поведение:

См. тж.

info ld, искать --as-needed; man ldd; info readelf
ldv@ в devel@

Ссылки


Страницы, ссылающиеся на данную: AltLinux/Sisyphus/devel/TypicalPackagingErrors/LinkingError
AltLinux/Team/Famous


 
Файлов нет. [Показать файлы/форму]
Много комментариев (3). [Показать комментарии/форму]