#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. Я только что добавил уточнение о доверенных каталогах.