在 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。
我有一个依赖于某个共享库的二进制文件,当我尝试 运行 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。