C 什么会干扰库加载路径

C 什么会干扰库加载路径,c,shared-libraries,C,Shared Libraries,我有一个C程序(IDS vortex),它使用库libbsf。我有几台差不多相同的ubuntu机器,除了其中一台之外,vortex在所有机器上都能正常工作 在那一次,它找不到图书馆。显式设置LD\u LIBRARY\u PATH=/usr/local/lib有效 /usr/local/lib位于/etc/ld.so.conf以及/etc/ld.so.conf/libc.conf中 运行ld.config-v查找库 我对什么会干扰并阻止这个可执行文件在运行时找到库感到困惑 我已将可执行文件复制到它

我有一个C程序(IDS vortex),它使用库
libbsf
。我有几台差不多相同的ubuntu机器,除了其中一台之外,vortex在所有机器上都能正常工作

在那一次,它找不到图书馆。显式设置
LD\u LIBRARY\u PATH=/usr/local/lib
有效

/usr/local/lib
位于
/etc/ld.so.conf
以及
/etc/ld.so.conf/libc.conf

运行
ld.config-v
查找库

我对什么会干扰并阻止这个可执行文件在运行时找到库感到困惑

我已将可执行文件复制到它找到库的另一台机器上

最初,我使用puppet将可执行文件和库分发给所有机器,当其中一台机器出现故障时,我最终编译了实际机器上的所有位,然后才确定这确实是库路径的问题。设置
LD_LIBRARY_PATH
验证了这一点


征求意见

在不运行ldconfig的情况下更改/etc/ld.so.conf中的任何内容都会导致问题。在这种情况下,我不知道事情是如何失去同步的,但您不能假设ld.so.conf的当前状态反映了运行时发生的情况


将我指向strace很有用(谢谢!)我开始攻击ld.conf,但我所做的一切都没有带来任何不同。然后一位同事给我指了指ldconfig。

你能在命令上运行一个
strace
,看看它试图在哪里找到库(没有设置
LD\u library\u PATH
)?另外,如果你执行
ldd
?open(/usr/lib/x86\u 64/libbsf.so.1.0.1“,O\u RDONLY | O\u CLOEXEC)=-1 enoint(没有这样的文件或目录)stat,会发生什么情况(“/usr/lib/x86_64”,0x7fffa13ee660)=-1 enoint(没有这样的文件或目录)打开(“/usr/lib/libbsf.so.1.0.1”,O_RDONLY | O_CLOEXEC)=-1 enoint(没有这样的文件或目录)stat(“/usr/lib”,{st_mode S=S|IFDIR 0755,st_size=12288,…)=0,即搜索除/usr/local/lib之外的所有应该搜索的位置???当您说或多或少相同的机器时,有什么区别?ldd说找不到库。