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. 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 fedora# gcc -print-file-name=liblto_plugin.so liblto_plugin.so
(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).