2017-02-07 26 views
0

сообщает Readelf, что libutil.so.1 нужна утилита SSH:отчетов readelf так файл в случае необходимости, но ни одна из функций (или другие символы) не используются из него

$readelf -s /usr/bin/ssh | grep libutil 
0x0000000000000001 (NEEDED)    Shared library: [libutil.so.1] 

Как нм говорит, libutil. so.1 имеет только 6 внешних символов:

$nm -D /lib64/libutil.so.1 | grep "T " 
000000331e0015a0 T forkpty 
000000331e000fa0 T login 
000000331e0010f0 T login_tty 
000000331e001190 T logout 
000000331e0012e0 T logwtmp 
000000331e0013d0 T openpty 

Но эти символы не упоминаться от SSH:

$nm -D /usr/bin/ssh | grep forkpty 
$nm -D /usr/bin/ssh | grep login 
$nm -D /usr/bin/ssh | grep login_tty 
$nm -D /usr/bin/ssh | grep logout 
$nm -D /usr/bin/ssh | grep logwtmp 
$nm -D /usr/bin/ssh | grep openpty 

(grep not showing any matches) 

Что происходит? Почему библиотека ссылается как НЕОБХОДИМО, но символы из нее не используются? Это не единственный пример. Я встретил много таких «пустых» ссылок, анализируя зависимости других исполняемых файлов.

+0

В чем дистрибутив вы создали это приложение? – yugr

+0

Distro был Red Hat 6.6, но я не думаю, что это имеет значение. – spacistor

+0

, это значит, что на современных дистрибутивах '-as-needed' включен по умолчанию, поэтому вам нужно будет использовать' -no-as-needed', чтобы исправить вашу проблему. Redhat 6 кажется здравым, хотя (только что проверено). – yugr

ответ

2

Маркировка DT_NEEDED создана редактором ссылок (ld) на основе флагов -l. По умолчанию для редактора ссылок GNU и большинства других редакторов, за некоторыми исключениями, необходимо создать тег DT_NEEDED для каждого установленного флага -l.

При использовании GNU ld или gold, вы можете пройти --as-needed перед -l флагами только испускают DT_NEEDED тегов для библиотек, которые действительно используются. Это может по-прежнему испускать не очевидные теги, если символы фактически используются косвенно.

Я действительно написал значительную сумму около --as-needed и как это работает, поэтому вы можете просмотреть my blog posts, если вам интересно.

+0

«Значение по умолчанию для редактора ссылок GNU ... заключается в создании тега DT_NEEDED» - по умолчанию не используется '-as-needed' по умолчанию для всех современных дистрибутивов (Ubuntu, Fedora, OpenSuse)? – yugr

+0

Невозможно говорить для всех, но он не включен по умолчанию на Gentoo Linux, но afaict. По крайней мере, не в не-мягкой версии. Я думаю, что это может быть в «золоте». –

 Смежные вопросы

  • Нет связанных вопросов^_^