[devel] ldd: почему?

Damir Shayhutdinov damir на altlinux.org
Пт Сен 29 09:39:44 MSD 2006


> > Потому что --as-needed.
> > Со статической сборкой было бы то же самое.
> Знаете, я не первый раз встречаюсь с упоминаемой близостью
> динамических--as-needed и статических библиотек. И мне такое сравнение
> не нравится. Всё-таки динамические (даже если с --as-needed) остаются
> динамическими. И пожелание к ним такое: чтобы они декларировали
> используемые библиотеки. Хотя, конечно, такое пожелание не всегда легко
> выполнимо.

Объясняю:
Допустим, что библиотека A использует библиотеку B.
Тогда, если вы собираете библиотеку С, которая использует символы из
библиотек A и B, то без --as-needed вам было достаточно прилинковывать
только библиотеку A, а библиотека B "вытягивалась" неявно. С
--as-needed вам надо прилинковывать обе библиотеки, и это правильно.
Вы ведь используете символы из обеих библиотек.
Если бы вы использовали символы только из A, то и прилинковывать надо
было только библиотеку A. В случае --no-as-needed к результирующей
библиотеке оказалась бы напрямую слинкована библиотека B. В случае
--as-needed этого бы не произошло.

>
> Хорошо, что у нас есть verify-elf, и он не дремлет!
Если вас волнуют предупреждение именно на этапе сборки, то можно
добавить -Wl,--no-allow-shlib-undefined в LDFLAGS (но это не панацея,
потому что некоторые кривые библиотеки должны быть недолинкованы).

> > Указывайте все библиотеки, символы которых используются в вашей
> > библиотеке, в строке линковки и у вас не будет проблем ни со
> > статической сборкой, ни с --as-needed.
> Чур меня от статических библиотек. :)
Это аргумент для апстримов.


Подробная информация о списке рассылки Devel