我有两个不同版本的库假设 libxyz.soGDB加载不正确库
在两个不同的位置
1) /home/maverick/dev/libxyz.so (development Version)
2) /home/maverick/prod/libxyz.so (Production Version)
我有编好的程序编译和链接与适当的版本的设置库的数量取决于LD_LIBRARY_PATH。例如,如果我想我的程序与libxyz.so我改变我的LD_LIBRARY_PATH添加/家庭/特立独行的/ dev的开发版本的链接,如果我想和督促版本链接更改LD_LIBRARY_PATH添加/家庭/特立独行/ PROD代替。
我用开发版和
ldd MyProg
输出连接编译了一个程序是
libxyz.so => /home/maverick/dev/libxyz.so
如果我运行该程序加载从
/home/maverick/dev/libxyz.so
的libxyz.so
并运行良好。 就这一点我LD_LIBRARY_PATH包含的/ home /特立独行的/ dev不是/家/特立独行/ PROD
但是当我试图通过GDB调试这个程序
gdb MyProg
它加载从位置
的libxyz.so/home/maverick/prod/libxyz.so
我在调试期间无法使GDB加载正确版本的库。所以到现在我在做什么,首先启动该程序(即负载dev的版本),并附加GDB到PID这种方式其工作正常。但如果它运行像
gdb MyProg
忽略了最低
我想尽一切事情解决这个问题,例如如何设置SYSROOT,solib搜索路径的GDB,但没有什么工作。 如果事实上,当我成立了SYSROOT指向库GDB的调试版本给了像
.dynamic section for XXX is not at the expected address
一些消息的任何建议,将不胜感激。
是的,我用tcsh – Maverick
当GDB执行 $ SHELL -c你的程序[参数...] 做我的壳(TCHS)从.tcshrc文件读取它的包膜或者用它目前的环境? 如果它从.tcshrc中读取,则问题在于三。 coz in .tcshrc LD_LIBRARY_PATH仍然保存/ home/maverick/prod。 – Maverick
它的工作,谢谢你。 问题的根源在于GDB以这种方式运行程序 $ SHELL -c your-program [args ...] 很好的知道。 – Maverick