ldd 显示重复的共享库

car*_*man 6 c++ ldd

我不清楚为什么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
Run Code Online (Sandbox Code Playgroud)

否则在安装正确的依赖项后 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 
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况?

谢谢,

Tom*_*ner 4

第二次,ldd 找到共享库,并缓存该信息,因此不需要继续寻找它。

但是,在第一种情况下,它找不到共享库,因此没有任何内容可以缓存。因此,当它找到另一个对您知道应该是同一共享库的引用时,它只知道它还没有找到它,因此它会寻找它。然后第二次打印错误。