You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在/usr/lib递归查找库文件中函数/结构体的命令问题

正确递归查找/usr/lib下.a库中特定函数/结构体的命令

你的命令顺序完全搞反啦!管道是把前一个命令的输出作为后一个的输入,你现在先跑了nm -A(没指定文件的话它会等着读标准输入),再用find找文件,这根本没法正确工作。

给你几个正确的实现方式,按需选用:

最基础的写法(逐个处理文件)

find /usr/lib -name "*.a" -exec nm -A {} \; | grep "FunctionThatIWantFound"

各部分解释:

  • find /usr/lib -name "*.a":递归遍历/usr/lib目录,筛选出所有静态库文件(后缀为.a)
  • -exec nm -A {} \;:对每个找到的文件({}代表当前匹配到的文件)执行nm -A命令,-A参数会在输出中带上完整文件名,方便你定位到具体是哪个库包含目标符号
  • | grep "FunctionThatIWantFound":过滤nm的输出,只保留包含你要找的函数/结构体的行

优化加速写法(批量处理文件)

如果/usr/lib下的静态库很多,用xargs代替-exec能提升效率(-exec是逐个处理文件,xargs会批量传递文件给nm):

find /usr/lib -name "*.a" | xargs nm -A | grep "FunctionThatIWantFound"

如果担心文件名包含空格(虽然静态库一般不会有这种情况),可以用安全版的写法:

find /usr/lib -name "*.a" -print0 | xargs -0 nm -A | grep "FunctionThatIWantFound"

进阶筛选:只找定义的符号

如果你只想找已定义的函数/结构体(不是被引用的符号),可以结合nm的符号类型标记:

  • 大写T:全局定义的函数/符号
  • 小写t:静态(局部)定义的函数/符号
  • 大写D:全局定义的数据(比如结构体实例)
  • 小写d:局部定义的数据

比如只找全局定义的函数:

find /usr/lib -name "*.a" -exec nm -A {} \; | grep -E "FunctionThatIWantFound.*T"

内容的提问来源于stack exchange,提问作者Rubén Pozo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:01:02