GDB 无法加载 so 文件和错误 No such file or directory
Posted
技术标签:
【中文标题】GDB 无法加载 so 文件和错误 No such file or directory【英文标题】:GDB failed to load so files and errors No such file or directory 【发布时间】:2017-09-26 23:19:35 【问题描述】:我正在使用 alpine linux 将核心文件加载到 docker 容器内的 GDB 中。
最初我的 gdb 抱怨找不到二进制文件,然后我关注了这个讨论 gdb During startup program exited with code 127 并安装了 libc6-compat,即使我有一个 64 位 linux 并且我的二进制解释器是 64 位 [Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
这确实有效,但现在我在 .so 文件中遇到了同样的错误。我可以看到 .so 文件位于 solib-search-path 上设置的路径中,但 gdb 没有加载任何库并抱怨没有这样的文件或目录。
二进制文件在库所在路径的生产主机上运行 我通过设置 solib-search-path 在开发主机上运行二进制文件
ldd 二进制表示未找到库,这是预期的,因为这是一个开发主机
【问题讨论】:
您遗漏了很多细节。二进制文件是否在 GDB 之外运行?图书馆在哪里?readelf -d a.out
的输出是什么?来自ldd a.out
?
【参考方案1】:
二进制文件在库所在路径的生产主机上运行我通过设置 solib-search-path 在开发主机上运行二进制文件
你的问题就在这里。
solib-search-path
是 GDB 查找库的路径。
在不可能该设置不会影响二进制文件本身,它使用标准系统库路径、编译入 DT_RPATH
或 LD_LIBRARY_PATH
环境变量来搜索共享库。
通常,solib-search-path
仅应在您分析来自其他主机的核心转储时设置(GDB 需要访问生成核心转储时使用的确切库) .在运行本地二进制文件时设置solib-search-path
是不必要的——GDB 可以通过询问运行时加载程序自动推断库的位置。
ldd 二进制表示未找到库,这是预期的,因为这是一个开发主机
如果ldd
这么说,那么当然您将无法运行二进制文件(在外部 GDB 内部)。
【讨论】:
我已经设置了 solib-search-path 并加载了一个核心文件,即使现在 gdb 显示No shared libraries loaded at this time
。
@PMat A)您似乎又在问一个完全不同的问题,并且 B)您在这样做时没有提供足够的详细信息。鉴于您提供的信息,我看不出任何人可以帮助您。
实际上,重新阅读您的问题,我认为与此问题重复:***.com/a/10629444/50617以上是关于GDB 无法加载 so 文件和错误 No such file or directory的主要内容,如果未能解决你的问题,请参考以下文章
error while loading shared libraries: libXXX.so.X: cannot open shared object file: No such file
error while loading shared libraries: libXXX.so.X: cannot open shared object file: No such file
Error: libopencv_calib3d.so.2.4: cannot open shared object file: No such file or directory
Error: libopencv_calib3d.so.2.4: cannot open shared object file: No such file or directory
Error: libopencv_calib3d.so.2.4: cannot open shared object file: No such file or directory
Error: libopencv_calib3d.so.2.4: cannot open shared object file: No such file or directory