我正在与第三方供应商合作,我怀疑这要么没有给我我需要的所有库,要么没有建立他们的示例项目以正确链接到所有必要的库。他们只是丢了一个文件夹,然后在我身上投射项目。显然,联系他们是一项复杂的任务。所以,在我这样做之前...
在Linux中,有没有一种方法可以扫描目录中的所有共享和静态ARM库以获取功能或方法签名,以便可以找到可以实现void foo(int, float);
的库,以便可以尝试链接到它,看看它是否可以解决我未解决的依赖关系?
我看到了一些有关使用nm的帖子,但是我不知道如何在ARM库上使用它或如何搜索特定的函数/方法。
答案 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