我如何使用 find、nm 和 grep 在许多共享库中查找符号?

how do i use find, nm, and grep to find a symbol among many shared libraries?

我正在努力使用正确的命令来执行以下操作:

查找所有包含特定符号的共享库 (*.so)。

这是我试过的:

find -iname '*.so*' -exec nm {} \; | grep -H _ZN6QDebugD1Ev

上面给出了一些找到符号的输出,但没有指出符号出现的文件名。我给 grep 的任何标志告诉它打印文件名都丢失了,因为 grep 是从标准输入输入的.

(standard input):         U _ZN6QDebugD1Ev
(standard input):         U _ZN6QDebugD1Ev
(standard input):         U _ZN6QDebugD1Ev
(standard input):         U _ZN6QDebugD1Ev
(standard input):0015e928 T _ZN6QDebugD1Ev
(standard input):         U _ZN6QDebugD1Ev
(standard input):         U _ZN6QDebugD1Ev
(standard input):         U _ZN6QDebugD1Ev

另一次尝试:

find -iname '*.so*' -exec nm {} \; -exec grep _ZN6QDebugD1Ev {} \;

这行不通,因为两位执行官完全独立。

我该怎么办?

将“-A”选项传递给 nm,它将在其输出前加上文件名。然后只需 grep 查找您感兴趣的符号,例如:

find -iname '*.so*' -exec nm -A {} \; | grep _ZN6QDebugD1Ev