gdb无法打开共享对象文件

问题描述:

我想从控制台开始调试我的应用程序。gdb无法打开共享对象文件

> 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. 

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

有两个可能的原因:

  • 你忘了export LD_LIBRARY_PATH - GDB创建一个新的外壳,以及未汇出的变量不复制到新的外壳
  • 你有一个~/.bashrc或一些这样重新设置LD_LIBRARY_PATH(不这样做!)

您可以验证上述任何一种为真这样做:

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

我说出口的语句在〜/ .bashrc,现在打开终端后,我有正确的输出 '>回声$ LD_LIBRARY_PATH /home/paceholder/projects/geo/lib/debug' 但是在我用'(gdb)shell'描述过之后,我没有任何东西,不知何故'LD_LIBRARY_PATH'在gdb启动后被覆盖 – paceholder 2013-04-27 21:27:55

您可以使用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