假设您使用包含多个工具和库的代码库,并且您想要移植(或复活)此类代码库中的某些组件,但是关于符号在各种库中的位置的任何线索要么丢失,要么需要很长时间才能找到查看代码本身(是的,改进的文档可以避免此类问题,但要求很高)。发现在哪个库中可以找到代码中使用的符号的最快方法是什么?
最佳答案
假设是一个 linux 机器,nm 工具会在库文件中列出名称,来拯救。
它可以用来进行广泛的搜索,如下所示:首先可以使用 find 找到所有可用的库(假设项目已经成功编译,没有您要添加的组件),然后可以将这样的 find 包含在一个在所有发现的库上调用 nm 的循环;然后 grep 输出以丢弃“U”引用( undefined symbol ,也就是在其他地方使用该符号)。在一个 bash 行中给出:
for lib in $(find base_path -name \*.a) ; do echo $lib ; nm $lib | grep my_symbol | grep -v " U " ; done
哪里:
- base_path 是你的代码库的根
- my_symbol 是您要查找的符号
echo 生成了所有找到的库的列表,这不是很干净,因为它输出的库名称不包含符号,但这是我发现直接引用库的最快方式,所以当你看到:
base_path/component/libA.a
0000000000000080 D my_symbol
你找到了你通常的嫌疑人。
关于c++ - 如何找到在静态库中定义符号的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19916119/