我在改变LD_LIBRARY_PATH
时会产生奇怪的副作用。
当我追加包含库的路径时,例如:
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/my_path/lib
然后,一切都变得令人难以置信地缓慢。例如,一个简单的ls
可以是10秒长。
ldd
更改之前和之后 LD_LIBRARY_PATH
输出完全相同,我尝试使用ls
调试慢strace
的执行:我得到的完全相同在两种情况下执行。在执行ls
期间执行甚至不会卡住(因为strace
在10秒滞后期间没有输出任何内容,然后突然完美地执行ls
)。所以我认为它可能来自我的shell,但是这是相同的,在我的bash上运行strace
并且在两种情况下执行ls
都给出了相同的strace
输出:shell执行{ {1}}并等待其执行结束(滞后ls
为strace
之前的最后strace
输出)。所以我想在waitpid(...)
的启动和它的执行之间发生了一些错误,就好像它是一个内核级问题。它的确就像在ls
上使用sleep
一样(0 cpu使用率)。
在延迟期间,我的CPU和网络活动完全正常......
请注意,新LD路径中的库不会与任何“标准库”冲突,因此在我的示例中它不会打扰ls
。
所以我对有关ls
副作用或如何深入调试我的例子的更深入解释感兴趣。
答案 0 :(得分:1)
这篇文章已经过时了,所以我不知道你是否已找到解决方案。无论如何,我不知道这是否有帮助,但在大多数现代GNU / Linux系统中,不推荐使用LD_LIBRARY_PATH 并且不鼓励使用。
因此我有几点建议:
如果要继续使用它,请先预先挂起,而不是将库路径附加到LD_LIBRARY_PATH。如果需要很长时间来扫描先前库目录中的路径,这应该会有所帮助。
使用LDCONFIG系统,这是现在使用LD目录的(新)正确方法。您只需在 /etc/ld.so.conf 文件中添加库的路径,或者更好,在/etc/ld.so.conf.d/中添加包含路径的文件到您的库(如果 /etc/ld.so.conf 中有include指令,则会获取它,默认情况下通常是这种情况)。然后运行sudo ldconfig
以更新系统LD搜索路径。
我希望这有帮助。干杯
答案 1 :(得分:0)
我不确定您要添加的LD_LIBRARY_PATH
或库中还有哪些内容或正在运行的程序,但您可能最好还是编写一个包装脚本来更改LD_LIBRARY_PATH仅用于该程序需要额外的库,以便像ls
这样的系统功能不受影响。
#!/bin/bash
export LD_LIBRARY_PATH=/my_path/lib
program_name
创建文件和chmod +x wrapper_name