Summary: | gcc: liblto_plugin.so packaged in the wrong place | ||
---|---|---|---|
Product: | Sisyphus | Reporter: | Vitaly Chikunov <vt> |
Component: | gcc | Assignee: | Gleb F-Malinovskiy <glebfm> |
Status: | CLOSED FIXED | QA Contact: | qa-sisyphus |
Severity: | normal | ||
Priority: | P5 | CC: | glebfm, ldv |
Version: | unstable | ||
Hardware: | x86 | ||
OS: | Linux | ||
Bug Depends on: | |||
Bug Blocks: | 40617 |
Description
Vitaly Chikunov
2021-07-30 07:17:49 MSK
(In reply to Vitaly Chikunov from comment #0) > man gcc: > -print-file-name=library > Print the full absolute name of the library file library that > would be used when linking---and don't do anything else. $ gcc -print-search-dirs install: /usr/lib64/gcc/x86_64-alt-linux/10/ programs: =/usr/libexec/gcc/x86_64-alt-linux/10/:/usr/libexec/gcc/x86_64-alt-linux/10/:/usr/libexec/gcc/x86_64-alt-linux/:/usr/lib64/gcc/x86_64-alt-linux/10/:/usr/lib64/gcc/x86_64-alt-linux/:/usr/lib64/gcc/x86_64-alt-linux/10/../../../../x86_64-alt-linux/bin/x86_64-alt-linux/10/:/usr/lib64/gcc/x86_64-alt-linux/10/../../../../x86_64-alt-linux/bin/ libraries: =/usr/lib64/gcc/x86_64-alt-linux/10/:/usr/lib64/gcc/x86_64-alt-linux/10/../../../../x86_64-alt-linux/lib/x86_64-alt-linux/10/:/usr/lib64/gcc/x86_64-alt-linux/10/../../../../x86_64-alt-linux/lib/../lib64/:/usr/lib64/gcc/x86_64-alt-linux/10/../../../x86_64-alt-linux/10/:/usr/lib64/gcc/x86_64-alt-linux/10/../../../../lib64/:/lib/x86_64-alt-linux/10/:/lib/../lib64/:/usr/lib/x86_64-alt-linux/10/:/usr/lib/../lib64/:/usr/lib64/gcc/x86_64-alt-linux/10/../../../../x86_64-alt-linux/lib/:/usr/lib64/gcc/x86_64-alt-linux/10/../../../:/lib/:/usr/lib/ В gcc есть две опции на эту тему: * -print-file-name (она ищет в путях libraries:) * -print-prog-name (она ищет в путях programs:) > alt$ gcc -print-file-name=liblto_plugin.so > liblto_plugin.so > > Other distros: > > opensuse# gcc -print-file-name=liblto_plugin.so > /usr/lib64/gcc/x86_64-suse-linux/11/liblto_plugin.so > > clearlinux# gcc -print-file-name=liblto_plugin.so > /usr/lib64/gcc/x86_64-generic-linux/11/liblto_plugin.so В некоторых дистрибутивах libraries и programs кладутся в одно и то же место. > fedora# gcc -print-file-name=liblto_plugin.so > liblto_plugin.so А в некотороых -- в разные, в таких дистрибутивах работает только $ gcc -print-prog-name=liblto_plugin.so /usr/libexec/gcc/x86_64-alt-linux/10/liblto_plugin.so Значит так и должно быть? Меня смутило "full absolute name". (In reply to Vitaly Chikunov from comment #2) > Значит так и должно быть? Меня смутило "full absolute name". Это если найдёт, то full absolute name. (Ответ для Dmitry V. Levin на комментарий #3) > (In reply to Vitaly Chikunov from comment #2) > > Значит так и должно быть? Меня смутило "full absolute name". > > Это если найдёт, то full absolute name. Теперь понял. Спасибо! (In reply to Gleb F-Malinovskiy from comment #1) > В некоторых дистрибутивах libraries и programs кладутся в одно и то же место. > > > fedora# gcc -print-file-name=liblto_plugin.so > > liblto_plugin.so > > А в некотороых -- в разные, в таких дистрибутивах работает только > $ gcc -print-prog-name=liblto_plugin.so > /usr/libexec/gcc/x86_64-alt-linux/10/liblto_plugin.so Я не понял, а почему liblto_plugin.so попал в programs, а не в libraries? Это же plugin, а не executable. (Ответ для Dmitry V. Levin на комментарий #5) > Я не понял, а почему liblto_plugin.so попал в programs, а не в libraries? > Это же plugin, а не executable. Видимо, надо переложить в /usr/lib64/gcc/x86_64-alt-linux/10/ (In reply to Vitaly Chikunov from comment #6) > (Ответ для Dmitry V. Levin на комментарий #5) > > Я не понял, а почему liblto_plugin.so попал в programs, а не в libraries? > > Это же plugin, а не executable. > > Видимо, надо переложить в /usr/lib64/gcc/x86_64-alt-linux/10/ Зависит от того, для каких процессов предназначен этот плагин. > Зависит от того, для каких процессов предназначен этот плагин.
Для libbfd, и всех кто с ней слинкован. В binutils это:
/usr/bin/addr2line
/usr/bin/ar
/usr/bin/as
/usr/bin/c++filt
/usr/bin/gprof
/usr/bin/ld.bfd
/usr/bin/ld.default
/usr/bin/nm
/usr/bin/objcopy
/usr/bin/objdump
/usr/bin/ranlib
/usr/bin/size
/usr/bin/strings
/usr/bin/strip
ps.
$ strings /usr/lib64/libbfd-2.35.1.20210104.so|grep bfd-pl
/usr/bin/../lib/bfd-plugins
/usr/lib64/bfd-plugins
$ findsym-remote bfd_plugin_set_plugin: sisyphus x86_64 binutils-2.35.2-alt2.x86_64.rpm usr/bin/ar bfd_plugin_set_plugin:U sisyphus x86_64 binutils-2.35.2-alt2.x86_64.rpm usr/bin/nm bfd_plugin_set_plugin:U sisyphus x86_64 binutils-2.35.2-alt2.x86_64.rpm usr/bin/ranlib bfd_plugin_set_plugin:U sisyphus x86_64 kcov-38-alt3.x86_64.rpm usr/bin/kcov bfd_plugin_set_plugin@@Base:T sisyphus x86_64 perf-5.13-alt1.x86_64.rpm usr/bin/trace bfd_plugin_set_plugin@@Base:T sisyphus x86_64 binutils-2.35.2-alt2.x86_64.rpm usr/lib64/libbfd-2.35.2.20210110.so bfd_plugin_set_plugin@@Base:T То есть юзают только ar, nm, ranlib, а kcov и perf слинкованы статически. Или "для каких процессов" вопрос был о чём-то другом? (In reply to Vitaly Chikunov from comment #10) > То есть юзают только ar, nm, ranlib, а kcov и perf слинкованы статически. Т.е. может использовать практически кто угодно. Тогда получается, что плагин не на месте. Переоткрыл и переименовал ошибку. $ rpm -ql gcc10 | grep /usr/libexec/gcc /usr/libexec/gcc/x86_64-alt-linux/10 /usr/libexec/gcc/x86_64-alt-linux/10/collect2 /usr/libexec/gcc/x86_64-alt-linux/10/liblto_plugin.so /usr/libexec/gcc/x86_64-alt-linux/10/liblto_plugin.so.0 /usr/libexec/gcc/x86_64-alt-linux/10/liblto_plugin.so.0.0.0 /usr/libexec/gcc/x86_64-alt-linux/10/lto-wrapper /usr/libexec/gcc/x86_64-alt-linux/10/lto1 /usr/libexec/gcc/x86_64-alt-linux/10/plugin /usr/libexec/gcc/x86_64-alt-linux/10/plugin/gengtype У opensuse и clr /usr/libexec/gcc/ нет и все оттуда лежит в /usr/lib64/gcc/*/11/ (Ответ для Dmitry V. Levin на комментарий #11) > Тогда получается, что плагин не на месте. Сделал пример задания где он переложен https://git.altlinux.org/tasks/281519/ builder@x86_64:~$ gcc -print-file-name=liblto_plugin.so /usr/lib64/gcc/x86_64-alt-linux/10/liblto_plugin.so (In reply to Dmitry V. Levin from comment #5) > (In reply to Gleb F-Malinovskiy from comment #1) > > В некоторых дистрибутивах libraries и programs кладутся в одно и то же место. > > > > > fedora# gcc -print-file-name=liblto_plugin.so > > > liblto_plugin.so > > > > А в некотороых -- в разные, в таких дистрибутивах работает только > > $ gcc -print-prog-name=liblto_plugin.so > > /usr/libexec/gcc/x86_64-alt-linux/10/liblto_plugin.so > > Я не понял, а почему liblto_plugin.so попал в programs, а не в libraries? > Это же plugin, а не executable. Это как раз очевидно, они в programs кладут helper-ы, а в libraries кладут то, с чем имеет смысл линковаться. Но решение меня вполне устраивает, хоть идея смешивать это всё и не вызывает у меня восторга. gcc10-10.3.1-alt3 -> sisyphus: Sat Jul 31 2021 Vitaly Chikunov <vt@altlinux> 10.3.1-alt3 - Move contents of libexecdir to libdir (ALT#40611). |