【问题标题】:gdb can not open shared object filegdb 无法打开共享对象文件
【发布时间】:2013-04-21 16:43:12
【问题描述】:

我正在尝试从控制台开始调试我的应用程序。

> gdb ./Geod

然后在 gdb 中

(gdb) run

我得到了输出:

error while loading shared libraries: libGeo.Cored.so.1: 
cannot open shared object file: No such file or directory

系统配置如下:

> echo $LD_LIBRARY_PATH
    /home/paceholder/projects/geo/lib/debug

> ls $LD_LIBRARY_PATH
    libGeo.Cored.so.1.0.0
    libGeo.Cored.so 
    libGeo.Cored.so.1
    libGeo.Cored.so.1.0


(gdb) show solib-search-path
    The search path for loading non-absolute shared library symbol files is
    /home/paceholder/projects/geo/lib/debug.

【问题讨论】:

    标签: linux gdb shared-libraries


    【解决方案1】:

    您可以在 gdb 中使用set environment 命令来更改 gdb 用于启动您要调试的程序的环境。摘自 gdb 帮助:

    (gdb) help set environment 
    Set environment variable value to give the program.
    Arguments are VAR VALUE where VAR is variable name and VALUE is value.
    VALUES of environment variables are uninterpreted strings.
    This does not affect the program until the next "run" command.
    

    LD_LIBRARY_PATH 为例:

    (gdb) set environment LD_LIBRARY_PATH /home/paceholder/projects/geo/lib/debug
    

    【讨论】:

      【解决方案2】:

      error while loading shared libraries: libGeo.Cored.so.1

      有两个可能的原因:

      • 你忘了export LD_LIBRARY_PATH -- GDB 创建一个新的 shell,未导出的变量不会复制到那个新的 shell
      • 您有一个 ~/.bashrc 或其他类似的重置 LD_LIBRARY_PATH(不要那样做!)

      您可以通过以下方式验证上述任一情况是否正确:

      (gdb) shell
      $ echo $LD_LIBRARY_PATH
      $ ls $LD_LIBRARY_PATH
      

      【讨论】:

      • 我在 ~/.bashrc 中添加了 export 语句,现在打开终端后我有正确的输出>echo $LD_LIBRARY_PATH /home/paceholder/projects/geo/lib/debug 但是在我按照你描述的(gdb) shell 尝试之后我什么也没得到,不知何故LD_LIBRARY_PATH 得到了gdb 启动后覆盖
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-23
      • 2013-05-05
      • 2017-05-21
      • 2012-05-24
      • 2014-02-10
      • 2021-01-06
      相关资源
      最近更新 更多