Ldd 显示重复的共享库。

6

我不清楚为什么当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个回答

4
第二次运行时,ldd 找到了共享库,并缓存了信息,因此不需要继续寻找。
但是在第一种情况下,它找不到共享库,所以没有内容可以缓存。当它找到另一个应该是相同的共享库时,它只知道它还没有找到它,所以会继续查找。然后再次打印出错误信息。

那么,在第一次实例中,显示的错误数量与引用数量成比例吗? - basav
好的,这是它无法找到库的次数,是的。 - Tom Tanner
我遇到了类似的问题,只不过库的第二个显示指向一个有效的库。因此它既找不到它,又找到了它。 - MattHusz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接