我原本以为这个问题已经被问过,但是我找不到它。如果是的话请耐心等待。
我正在尝试对debian安装中的现有程序进行修改。
程序,称之为foo,在编译时会创建一些自己的共享库。我想调试程序并进入一个本地共享库,称之为libbar.so。
然而,因为这是一个现有的程序,所以已经有一个/usr/lib/libbar.so,我不想覆盖它。
那么如何让gdb使用本地libbar.so?
答案 0 :(得分:0)
程序,称之为foo,在编译时会创建一些自己的共享库。
你的意思是该程序在运行时将自己的libbar.so
副本写入磁盘吗?
这是非常不寻常的。您可能的意思是,当构建程序时,还会构建本地libbar.so
。
我想调试程序并进入其中一个本地共享库,称之为libbar.so。
如果实际上程序加载了本地libbar.so
。
可能发生的事情是,当你运行程序时,它加载/usr/lib/libbar.so
,然后GDB使用程序已加载的内容(你可以看到GDB认为的内容)使用info shared
GDB命令加载。
如果您希望自己的程序加载libbar.so
的本地副本,则需要调整LD_LIBRARY_PATH
,或使用{修改程序中的DT_RPATH
或DT_RUNPATH
。 {1}}(本地-Wl,-rpath=/path/to/lib
位于libbar.so
)。完成后,GDB将自动选择本地/path/to/lib/libbar.so
。