ldd show дублированная общая библиотека

Я не понимаю почему ldd показывает мне одну и ту же разделяемую библиотеку более одного раза, когда она не может найти зависимость. В небольшом исполняемом файле, который использует boost, вывод:

libboost_chrono.so.1.49.0 => not found
libboost_system.so.1.49.0 => not found
libboost_system.so.1.49.0 => not found
libboost_program_options.so.1.49.0 => not found
libboost_regex.so.1.49.0 => not found

в противном случае после установки правильных зависимостей ldd показывает только одно:

libboost_system.so.1.49.0 => /usr/lib/libboost_system.so.1.49.0 
libboost_regex.so.1.49.0 => /usr/lib/libboost_regex.so.1.49.0 
libboost_program_options.so.1.49.0 => /usr/lib/libboost_program_options.so.1.49.0
libboost_chrono.so.1.49.0 => /usr/lib/libboost_chrono.so.1.49.0 

почему это происходит?

Спасибо,

1 ответ

Решение

Во второй раз ldd находит разделяемую библиотеку и кэширует информацию, чтобы не искать ее.

Однако в вашей первой ситуации он не может найти общую библиотеку, поэтому ему нечего кэшировать. И поэтому, когда он находит другую ссылку на то, что, как вы знаете, должна быть той же разделяемой библиотекой, все, что он знает, это то, что он не нашел ее, поэтому он ищет ее. Затем печатает ошибку 2 раза.

Другие вопросы по тегам