- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我对更改 LD_LIBRARY_PATH
有奇怪的副作用。
当我附加一个包含库的路径时,例如:
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/my_path/lib
然后,一切都变得令人难以置信的缓慢。例如,一个简单的 ls
可以是 10 秒长。
ldd
输出在 LD_LIBRARY_PATH
更改前后完全相同,我尝试使用 调试慢速
:我在这两种情况下得到完全相同的执行。在执行 ls
的执行>stracels
期间,执行甚至不会卡住(因为 strace
在 10 秒的滞后期间没有输出任何内容,然后突然完美地执行 ls
)。所以我认为它可能来 self 的 shell,但这是相同的,在我的 bash 上运行 strace
并在这两种情况下执行 ls
给我相同的 strace
输出:shell 执行 ls
并等待其执行结束(滞后 strace
之前的最后一个 strace
输出是 waitpid(...)
)。所以我猜想在 ls
的启动和执行之间发生了一些错误,就像它是内核级问题一样。它真的就像在 ls
上进行了 sleep
(0 cpu 使用率)。
在延迟期间,我的 CPU 和网络事件完全正常...
请注意,新 LD 路径中的库不与任何“标准库”冲突,因此它不会干扰我示例中的 ls
。
因此,我对有关 LD_LIBRARY_PATH
副作用或如何深入调试我的示例的深入解释很感兴趣。
最佳答案
这篇文章已经过时了,所以我不知道您是否找到了解决方案。无论如何,我不知道这是否有帮助,但在大多数现代 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搜索路径。
希望对您有所帮助。干杯
关于linux - LD_LIBRARY_PATH 副作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10899861/
在编译和链接C和C++代码时,LTDL_LIBRARY_PATH和LD_LIBRARY_PATH环境变量的作用是什么?另外它们还有什么区别? 谢谢 最佳答案 LTDL_LIBRARY_PATH 为 l
我是 Linux 的新手,刚刚使用带有 ARM64(Aarch64)的 Ubuntu 20.04 在 Oracle 云中设置了一个 VM。 我安装的 python 模块只有在我每次打开终端时都使用以下
我可以为单个应用程序设置 LD_LIBRARY_PATH 吗? 我正在调查系统调用失败,那么有什么方法可以使用 LD_LIBRARY_PATH 设置来设置正确的路径吗? 最佳答案 最简单的方法是创建一
我是 ubuntu 和 python 的新手。当我运行命令 LD_LIBRARY_PATH 时,功能运行良好。 ***sudo LD_LIBRARY_PATH=/binaries/linux/x86_
在 Ubuntu 上运行 GDB 7.4-2012.02 并且遇到我无法在其他平台上复制的奇怪行为。 bash$ export LD_LIBRARY_PATH=my_path bash$ export
构建 snap 包时,包装器脚本会自动将 $SNAP/usr/lib 添加到 LD_LIBRARY_PATH。 在 docker 上构建我的包时,一些库(在本例中为 liblapack 和 libbl
我想将这些文件编译成可执行文件。 //main.c #include #include int main(void){ call_hello_world(); return 0; } //
是否可以更改当前进程的环境变量? 更具体地说,在 python 脚本中,我想更改 LD_LIBRARY_PATH,以便在导入依赖于某些 xyz.so 的模块“x”时,xyz .so 取 self 在
我读了this article recently ,为了好玩,我尝试通过执行以下操作来覆盖 libc printf 函数:- 创建一个使用 printf 打印的可执行文件 这是一个测试(printer
我在centos 6.4上安装了两个版本的python。它带有 python 2.6.6。我在/home/python 中安装了 2.6.2。我的 PATH 变量在路径(/usr/bin/python
我正在修改一个现有脚本,我想在其中检查可执行文件中使用的一组库以及在运行时调用的共享库。我有需要与共享库进行比较的库列表。为了获取共享库,我试图通过提供以下代码来获取 LD_LIBRARY_PATH,
当 git 给出以下错误信息时,问题就开始了“致命:无法找到‘https’的远程助手” 为了解决这个问题,我必须先编译 libcurl 来重新编译 git。在编译 git 时,我设置了 CPPFLAG
已关闭。这个问题是 off-topic 。目前不接受答案。 想要改进这个问题吗? Update the question所以它是 on-topic用于堆栈溢出。 已关闭10 年前。 Improve t
我想使用 lib.so 运行 C++ 代码并设置“LD_LIBRARY_PATH=/apollo/bazel-bin”,但 lib.so 位于“/apollo/bazel-bin/python”中,然
我正在尝试编译一个使用 zlib 的演示,我想我已经为 LD_LIBRARY_PATH 做了正确的设置,但它不适用于 -lz 标志,你能帮我找出问题所在吗? lisanhu@lisanhu-XPS-1
我有一个打印环境变量的简单控制台应用程序: int main(int argc, char **argv, char **envp) { printf("Scanning for LD_LIB_P
我正在尝试编译一个程序,但在配置检查期间找不到一个库。将我的 .bashrc 文件链接到这个库: LD_LIBRARY_PATH=/usr/lib/:/users/much/needed/libra
我正在为我的应用开发一个简单的插件架构。插件是具有已知“获取接口(interface)”功能的共享对象。我通过 dlopen/dlsym 等访问 .so。相当标准。我的一些插件有额外的 .so 文件也
我写了一个共享对象,比如说libsd.so,我把libsd.so和它的头文件sd.h放在~/lib. 这是另一个使用libsd.so的程序,比如test.c,然后像这样编译它: $ gcc -o te
我正在尝试在无法设置环境变量(无法导出)的远程系统上运行程序。我遇到的问题是我无法设置 LD_LIBRARY_PATH 来运行我的二进制文件,因为我没有(也无法获得)许可。 我需要对此进行快速修复,以
我是一名优秀的程序员,十分优秀!