【问题标题】:Failure to demangle symbol name in library (nm, objdump, c++filt)库中的符号名称解包失败(nm、objdump、c++filt)
【发布时间】:2021-12-04 11:19:54
【问题描述】:

我在perf script 的输出中发现了未分解的函数,最初认为perf 可能做错了什么。
但是,深入研究一些*.so 文件,我已经能够重现c++filt -tnm -Cobjdump -D -C 的问题。

我有点迷失在去错过程中可能出了什么问题。
没有被破坏的符号之一是:

_ZZNK5Gaudi10Functional7details16MultiTransformerIFSt5tupleIJSt6vectorIN4LHCb14VPLightClusterESaIS6_EESt5arrayIjLm53EEEERK12EventContextRKNS5_8RawEventERK4DeVPENS0_6Traits4use_IJNS5_7DetDesc21useConditionHandleForIJSI_EEENSM_11BaseClass_tINSO_23ConditionAccessorHolderI10FixTESPathINS_9AlgorithmEEEEEEEEELb0EE7executeESE_ENKUlDpRT_E_clIJK21DataObjectWriteHandleIS8_S8_EKS15_ISA_SA_EEEEDaS12_

该库是使用 GCC 10.1 编译的。但是如果我用 clang 11 编译,我可以在objdump -D -C 中找到相同的符号。

我现在有点走投无路,所以任何关于我可以检查的建议都将非常感激。 :)

【问题讨论】:

标签: c++ objdump name-mangling nm c++filt


【解决方案1】:

使用 cmets 中建议的工具解决。

llvm-cxxfilt 也可以使用,并且可能已经在某些机器上可用。

c++filtnmperfobjdump 使用在作为 GCC 的一部分的 libiberty 中实现的功能。 因此我在那里提交了一个错误报告:https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102851

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-21
    • 1970-01-01
    • 2011-11-05
    • 1970-01-01
    • 2020-05-05
    • 2011-03-19
    • 1970-01-01
    相关资源
    最近更新 更多