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-pathGDB 查找库的路径。

不可能该设置不会影响二进制文件本身,它使用标准系统库路径、编译入 DT_RPATHLD_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