在 GDB 会话中加载共享库

load shared lib in GDB session

我有一个依赖于某个共享库的二进制文件,当我尝试 运行 GDB 下的二进制文件时,它说找不到这个共享库:error while loading shared libraries: libshr1.so: cannot open shared object file: No such file or directory

我如何告诉 GDB 这个库所在的位置并加载它?我正在寻找类似于 LD_LIBRARY_PATH 的东西,但我想直接从 GDB 会话中设置它。

gdb(1) load 命令可能会执行您需要的操作:将共享库放入内存(连同它的符号 table,如果有的话)。

$ gdb
(gdb) info load
(gdb) load mylib.so
(gdb) run

How can I tell to GDB where this library is located and load it? I am looking for something similar to LD_LIBRARY_PATH, but I want to set it directly from the GDB session.

你不能——错误不是来自 GDB;它来自动态加载程序。

有两种方法可以告诉动态加载程序在哪里可以找到这个库:在 link 时使用 -rpath,或者设置 LD_LIBRARY_PATH 环境变量。

如果出于某种原因您不想在调用 GDB 之前设置 LD_LIBRARY_PATH,您可以在 (gdb) 提示符下使用 set env 命令进行设置:

(gdb) set env LD_LIBRARY_PATH /dir/where/libshr1/is/located
(gdb) run

P.S。如果这不起作用,您的 shell 可能不正确地重置了 LD_LIBRARY_PATH。参见 this answer