【问题标题】:load shared lib in GDB session在 GDB 会话中加载共享库
【发布时间】:2021-06-19 13:33:13
【问题描述】:

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

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

【问题讨论】:

    标签: linux gdb shared-libraries


    【解决方案1】:

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

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

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

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

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

    附:如果这不起作用,您的 shell 可能会不恰当地重置 LD_LIBRARY_PATH。见this answer

    【讨论】:

      【解决方案2】:

      gdb(1) load 命令可能会满足您的需求:将共享库(连同其符号表,如果有)放入内存。

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

      【讨论】:

      • (gdb) load libshr1.so system-supplied DSO at 0x7ffff7fce000' 已消失;保留其符号。当您的目标是 exec' 时,您不能这样做
      • GDB load 命令完全做其他事情。
      猜你喜欢
      • 1970-01-01
      • 2012-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-10
      • 2016-02-26
      相关资源
      最近更新 更多