我有兩個不同版本的庫假設 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