c++ - GDB加载so文件失败并报错No such file or directory

标签 c++ linux debugging gdb alpine-linux

我正在使用 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-pathGDB 查找库的路径。

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

相关文章:

c++ - POSIX 计时器可以安全地修改 C++ STL 对象吗?

java - 在JCIDE调试时安装.cap文件时遇到错误 '6985' '6A88'

php - 如何放置调试点

具有不同方法返回类型的 C++ 模板类设计

c++ - 无法将不完整类型 'void *' 的参数转换为 'const bitData'

c# - 从 C++ DLL 调用 C# 函数

linux - 如何启动将启动另一个 bash 文件的 bash 脚本?

linux - 在 ubuntu Linux 服务器中安装 google wavebox 时出错

java - Java和Linux操作系统随机挂起24分钟(Linux,arm,Debian,Java 7 ARM)

c++ - 我试过 : valgrind, _GLIBCXX_DEBUG,-fno-strict-aliasing;我该如何调试这个错误?