有没有一种方法可以扫描内置的ARM库以查找Linux中的功能?

时间:2018-07-16 23:04:19

标签: c++ linux arm

我正在与第三方供应商合作,我怀疑这要么没有给我我需要的所有库,要么没有建立他们的示例项目以正确链接到所有必要的库。他们只是丢了一个文件夹,然后在我身上投射项目。显然,联系他们是一项复杂的任务。所以,在我这样做之前...

在Linux中,有没有一种方法可以扫描目录中的所有共享和静态ARM库以获取功能或方法签名,以便可以找到可以实现void foo(int, float);的库,以便可以尝试链接到它,看看它是否可以解决我未解决的依赖关系?

我看到了一些有关使用nm的帖子,但是我不知道如何在ARM库上使用它或如何搜索特定的函数/方法。

1 个答案:

答案 0 :(得分:2)

nm工具可以扫描单个库的符号。

用于动态链接的符号与仅用于编译的符号位于不同的表中,因此可以通过nm --dynamic标志来扫描共享的lib导出/导入。

所有符号还具有单字节类型标识符,例如U表示库使用的符号,T表示库提供的符号。

对于C ++,还有c++filt工具可以将隐秘的C ++方法名称转换为简单的ascii字符串(related answer)。

它们都最适合普通的命令行脚本环境。例如,您可以通过以下简单的bash脚本在PWD的所有目录结构中检查Cica::Cica()构造函数:

for l in $(find -name "*.so*")
do
  echo "$l"
  nm --dynamic "$l"|c++filt|grep -F Cica::Cica
done