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

标签 c++

我想知道是否有一个现有工具可以列出一组 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::*)。

最佳答案

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

nm <object-file> | grep ' U '

其中 grep 命令仅过滤掉 undefined symbol 。查看手册页以了解其他类型字符的含义。

但是请注意,C++ 使用名称修饰:类似的函数

int foo(int a);

可以用类似的符号表示

_Z3fooi

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

关于c++ - 是否有工具可以识别一组 C++ 源文件引用的外部标识符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58687268/

相关文章:

c++ - Qt 没有收到 QWidget::dropEvent

c++ - 继承时体系结构 x86_64 的 undefined symbol

c++ - abort() 的调用者在回溯中是未知的,任何调试它的建议

c++ - C++中是否有一种简单的方法可以四舍五入到最接近的1.75增量

c++ - 在 C/C++ 中调试 : cost of calling an empty function

c++ - 将字符数组拆分为两个字符数组

c++ - valarray 复杂度

c++ - 正确使用 CMAKE_*_OUTPUT_DIRECTORY

c++ - 删除最后一个子串

c++ - 如何在cocos2d-x中将变量传递给lua函数?