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