2014-07-18 74 views
1

我原以为这个问题已经被问到,但我找不到它。如果是的话,请和我一起。在gdb中加载本地共享库

我试图在debian安装中修改现有的程序。

该程序在调用时调用它,创建一些它自己的共享库。我想调试程序并进入其中一个本地共享库,将其称为libbar.so。

但是,由于这是一个现有的程序,已经有一个/usr/lib/libbar.so,我不想覆盖它。

那么如何让gdb使用本地libbar.so?

回答

0

程序在编译时调用它,创建一些它自己的共享库。

您的意思是程序在运行时将其自己的副本libbar.so写出到磁盘上?

这是非常不寻常的。你可能的意思是,当大厦该方案,当地libbar.so也建成。

我想调试程序并进入本地共享库之一,将其称为libbar.so。

这应该已经发生,如果实际上程序加载本地libbar.so

什么是可能发生的事情是,当你运行该程序,负荷/usr/lib/libbar.so,然后GDB使用什么程序已经加载(你可以看到GDB认为通过使用info shared GDB命令加载)。

如果你希望你的程序加载的libbar.so本地副本,则需要调整LD_LIBRARY_PATH,或修改烤到程序中DT_RPATHDT_RUNPATH,使用-Wl,-rpath=/path/to/lib(其中本地libbar.so位于/path/to/lib/libbar.so)。一旦你这样做,GDB会自动拿起当地的libbar.so