我已經閱讀gdb says "cannot open shared object file"和gdb can not open shared object file並按照說明操作。GDB「無法打開共享對象文件」問題
我有一個鏈接到共享庫文件(/zzz/yyy/xxx.so
)的二進制文件。在將LD_LIBRARY_PATH
設置爲/zzz/yyy/
並運行沒有GDB的二進制文件後,它執行得非常好。
然而,當我試圖用GDB調試此二進制,GDB說:
error while loading shared libraries: xxx.so: cannot open shared object file: No such file or directory
我已經(在.gdbinit集):
(gdb)show env LD_LIBRARY_PATH
LD_LIBRARY_PATH = "/zzz/yyy/"
和
(gdb) show solib-search-path
The search path for loading non-absolute shared library symbol files is "/zzz/yyy/".
,並在我的系統:
% printenv LD_LIBRARY_PATH
/zzz/yyy
什麼是爲什麼GDB仍然無法找到此共享庫中的其他可能的原因是什麼?
在這些情況下,它是有用的'strace'。嘗試運行'strace -o out.txt gdb。/ myprogram',然後,在發生錯誤後退出調試器並執行'grep xxx.so out.txt'來查看gdb在哪裏查找庫。 – rodrigo
@rodrigo:謝謝。我意識到這是因爲我在〜/ .cshrc中有一個額外的LD_LIBRARY_PATH目錄。在該目錄中有一個x64版本庫文件(我的應用程序是爲x86構建的)。 x64版本文件使GDB抱怨。順便說一下,strace在這種情況下似乎並不奏效,但並沒有顯示GDB曾試圖訪問x64庫(但GDB應該這樣做)。 – stanleyli
也許gdb分叉。 'strace'默認只跟蹤一個進程。你也可以使用'strace -f'來跟蹤子進程,看看會發生什麼。 – rodrigo