7

我对改变有奇怪的副作用LD_LIBRARY_PATH

当我附加包含库的路径时,例如:

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/my_path/lib

然后,一切都变得难以置信的缓慢。例如,一个简单的ls可以长达 10 秒。

ldd更改前后的输出完全相同LD_LIBRARY_PATH,我尝试使用以下命令调试慢速执行lsstrace我在两种情况下都得到完全相同的执行。执行期间甚至不会卡住ls(因为strace在 10 秒延迟期间没有输出任何内容,然后突然完美执行ls)。所以我认为它可能来自我的 shell,但这是相同的,strace在我的 bash 上运行并ls在两种情况下执行都会给我相同的strace输出:shell 执行ls并等待其执行结束(strace滞后前的最后一个输出stracewaitpid(...))。所以我猜在发布之间发生了一些错误ls及其执行,就像它是内核级问题一样。它的作用就像sleep是在ls(0 cpu 使用)上进行的。

在延迟期间,我的 CPU 和网络活动完全正常...

ls请注意,新 LD 路径中的库不与任何“标准库”冲突,因此在我的示例中不会干扰。

LD_LIBRARY_PATH因此,我对有关副作用或如何深入调试我的示例的更深入解释很感兴趣。

4

2 回答 2

3

这篇文章已经过时了,所以我不知道你是否已经找到了解决方案。无论如何,我不知道这是否有帮助,但在大多数现代 GNU/Linux 系统中,不推荐使用 LD_LIBRARY_PATH 并且不鼓励使用。

因此,我有几个建议:

  1. 如果您想继续使用它,请先尝试预先添加而不是将您的库路径附加到 LD_LIBRARY_PATH。如果在以前的库目录中扫描路径需要很长时间,这应该会有所帮助。

  2. 使用 LDCONFIG 系统,这是当今使用 LD 目录的(新)正确方法。您只需在/etc/ld.so.conf文件中添加库的路径,或者更好的是,在 /etc/ld.so.conf.d/ 中添加一个包含库路径的文件(它将是如果/etc/ld.so.conf中有包含指令,则来源,默认情况下通常是这种情况)。然后运行sudo ldconfig更新系统LD搜索路径。

我希望这会有所帮助。干杯

于 2014-05-11T10:19:43.040 回答
0

我不确定您LD_LIBRARY_PATH或您要添加的库上还有什么或者您正在运行什么程序,但您最好编写一个包装脚本来更改 LD_LIBRARY_PATH 仅用于需要额外库的程序以便您的系统之类的功能ls不受影响。

#!/bin/bash
export LD_LIBRARY_PATH=/my_path/lib
program_name

创建文件和chmod +x wrapper_name

于 2012-06-07T19:58:25.327 回答