我正在使用 alpine linux 将核心文件加载到 docker 容器内的 GDB 中。
最初我的 gdb 提示找不到二进制文件,然后我关注了这个讨论 gdb During startup program exited with code 127并安装了 libc6-compat,即使我有一个 64 位 linux 并且我的二进制解释器是 64 位[请求程序解释器:/lib64/ld-linux-x86-64.so.2]
这确实有效,但现在我在 .so 文件中遇到了同样的错误。我可以看到 .so 文件位于 solib-search-path 上设置的路径中,但 gdb 没有加载任何库并提示没有这样的文件或目录。
二进制文件在库位于路径中的生产主机上运行 我通过设置 solib-search-path 在开发主机上运行二进制文件
ldd 二进制文件说找不到库,这是预期的,因为这是一个开发主机
最佳答案
binary runs on a production host where the libraries are in the path I am running the binary on a development host by setting the solib-search-path
你的问题就在这里。
solib-search-path
是 GDB 查找库的路径。
该设置绝不会影响二进制文件本身,它使用标准系统库路径、编译的 DT_RPATH
或 LD_LIBRARY_PATH
用于搜索共享库的环境变量。
通常,solib-search-path
只应在分析来自其他主机 的核心转储时设置(GDB 需要访问正确的库在生成核心转储时使用)。在运行本地二进制文件时设置 solib-search-path
永远不是必需的——GDB 可以通过询问运行时加载器它们在哪里来自动推断库的位置。
ldd binary says libraries not found which is expected since this is a development host
如果 ldd
这么说,那么当然您将无法运行二进制文件(在 GDB 内部或外部)。
关于c++ - GDB加载so文件失败并报错No such file or directory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46437172/