Как исполняемый файл ldd находит /usr/lib64/libstdc .so.6?

#c #linux #gcc #linker

#c #linux #gcc #компоновщик

Вопрос:

Когда я запускаю

 ldd ./myprogram
  

это показывает:

 ...
libstdc  .so.6 => /usr/lib64/stdc  .so.6
libm.so.6 => /lib64/libm.so.6
...
  

/usr/lib64 нет в моем LD_LIBRARY_PATH, как он находит /usr/lib64? Когда я связываю ‘myprgrom’, он связывал библиотеки из ${HOME}/mynewgcc/…/lib64.

Комментарии:

1. Посмотрите в /etc/ld.so.conf.d

2. @Brian: спасибо за ответ. Я проверил это: cat ld.so.conf показывает «включить ld.so.conf.d/*.conf». ‘cat’ *.conf под этим каталогом показывает: /usr/lib64/atlas hwcap 1 nosegneg hwcap 1 nosegneg /usr/local/lib /usr/lib64/mysql /usr/lib64/R/lib /usr/lib64/xulrunner не видит /usr/lib64

Ответ №1:

ldconfig Программа создает кэш для ld.so (вызывается ldd ) или ld-linux.so . Общие объекты добавляются в /etc/ld.so.conf /etc/ld.so.conf.d этот кэш и добавляются в него. Эти пути кэшируются для обеспечения более быстрого поиска (в отличие от поиска в произвольных местах в файловой системе, например LD_LIBRARY_PATH ). Также существуют определенные значения по умолчанию ldconfig , а именно /lib , /lib64 , /usr/lib , и /usr/lib64 («доверенные» каталоги), которые добавляются в каталоги в файлах конфигурации (если ldconfig -n не указано иное).

Комментарии:

1. пожалуйста, посмотрите мой комментарий Брайану выше. Я не вижу /usr/lib64 в этих файлах conf. Чего-то мне не хватает

2. Я только что добавил уточнение о доверенных каталогах.