是否有一个工具可以识别一组C ++源文件引用的外部标识符?

问题描述 投票:1回答:1

我想知道是否有一个现有工具列出了一组C ++源文件的外部依赖关系(例如,项目中有多个目录的一个目录)。在概念上类似于查找二进制文件的外部符号,但是会跨越一组源文件。

一个样本用例将用于处理整个代码库,以了解其内部的依赖性。例如,开发人员可以问一个问题:src/module1中的代码还依赖于代码库的其他部分吗?

例如,如果此工具在以下car.cc文件上运行,它将列出Vehiclestd::cout。如果同时在两个源文件上运行,它将只列出std::cout(因为现在已经在源文件集中定义了Vehicle)。

// vehicle.h
class Vehicle {
};
// car.cc
#include "vehicle.h"

class Car: public Vehicle {
  public:
    void honk() {
      cout << "Honk! \n" ;
    }
};

最好该工具在Linux上可用,并支持过滤掉一些引用(例如std :: *)。

c++
1个回答
0
投票

是,有。它称为nm,列出了给定编译目标文件导出/需要的所有符号。要查看对象所需的所有符号,可以运行

nm <object-file> | grep ' U '

grep命令仅过滤未定义的符号。看一下手册页,看看其他类型字符的含义。

但是请注意,C ++使用名称处理:类似函数>>

int foo(int a);

可能用类似的符号表示>

_Z3fooi

将其参数的类型编码为符号名称。这对于使函数重载起作用很重要,但实际上使符号名几乎无法读取。

© www.soinside.com 2019 - 2024. All rights reserved.