【问题标题】:Why can't ValGrind find my symbols?为什么 ValGrind 找不到我的符号?
【发布时间】:2014-01-20 13:27:01
【问题描述】:

我不知道我做错了什么,但我似乎无法解决这个问题。

根据file,

test: ELF 32-bit LSB executable, Intel 80386, version 1 (GNU/Linux), statically linked, for GNU/Linux 2.6.16, BuildID[sha1]=0x436d17ab04dc54f35f1a8e6a16d4f87aaf79a0e9, not stripped

上面清楚地写着“未剥离”。然而,当我运行 ValGrind 时,

--27709-- Reading syms from /root/ValGrind/test (0x8048000)
--27709--    object doesn't have a dynamic symbol table

我无法弄清楚为什么对象没有符号表...我做错了什么?

编辑: 是不是因为二进制文件是 32 位的,而我运行的是 64 位操作系统?还是应该无所谓?

【问题讨论】:

    标签: c++ debugging valgrind


    【解决方案1】:

    可执行文件是静态链接的;也许这会导致问题?

    实际上,是您要解决的问题是什么?因为“对象没有动态符号表”消息只是 Valgrind 的调试输出,所以应该没什么关系。

    顺便说一句。根据http://valgrind.org/docs/manual/faq.html#faq.hiddenbug Valgrind 无论如何都不能很好地与静态链接的应用程序一起使用。

    【讨论】:

    • 二进制是静态链接的。我想这是我的问题?
    • 在运行 Valgrind 时,静态链接至少会给你不完整的结果,所以是的,这是 a 问题。根据文档,您可以使用选项“--soname-synonyms=somalloc=NONE”作为解决方法(不过,我没有尝试过它确实有效)。
    【解决方案2】:

    编译/链接时是否忘记添加-g 或-ggdb 标志?

    【讨论】:

    • 不,我确实这样做了。 (并且二进制文件变大了。)
    【解决方案3】:

    将二进制文件从静态链接更改为动态链接。安装了 32 位库。现在可以使用了。

    (PS。对于其他拼命挣扎于 OpenSUSE 糟糕的包搜索的人,正确的包名称是 libstdc++6-32bit。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-28
      • 1970-01-01
      • 1970-01-01
      • 2021-11-12
      • 1970-01-01
      • 1970-01-01
      • 2014-05-05
      相关资源
      最近更新 更多