[devel] Предотвращение недолинковки

Alexey Tourbin alexey.tourbin на gmail.com
Сб Май 30 20:55:33 MSK 2020


On Sat, May 30, 2020 at 6:31 PM Mikhail Novosyolov
<mikhailnov на altlinux.org> wrote:
> Пытаюсь понять, как сделать так, чтобы verify_elf выдал ошибку при обнаружении unresolved symbols, но не ругался на non-LFS functions.
>
> Поставил "%global _verify_elf_method sctrict", получил:
> verify-elf: ERROR: ./usr/bin/audacity: uses non-LFS functions: __open_2 __xstat fcntl fopen getrlimit open readdir
...
> Задача - на этапе сборки убеждаться, что в рантайме не будет ошибки unresolved symbols. Зачем при этом проверять на соответствие LFS, не ясно. Поставить -Wl,--no-undefined не всегда вариант, т.к. многие апстримы допускают недолинковку плагинов. Мне кажется правильным в общем случае проверять, что /usr/bin/*, /usr/lib/*.so* не имеют недолинковки, а то, что лежит в нестандартных директориях вида /usr/lib64/xxx/*.so, не проверять, но при этом иметь возможность принудительно включить их проверку.

Недолинковка может быть только в shared objects, грубо говоря в *.so*.
Недолинковку в executables линкер пресекает на стадии линковки
(поэтому поверять /usr/bin/* особого смысла нет).  В частности и в
audacity нет таких файлов, которые оправдывали бы проверку:

$ rpmfile audacity-2.3.3-alt2.x86_64.rpm |grep ELF
/usr/bin/audacity       100755  ELF 64-bit LSB executable, x86-64,
version 1 (GNU/Linux), dynamically linked (uses shared libs), for
GNU/Linux 3.2.0, stripped


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