我正在开发一个现有的大型C ++代码库(超过100万行代码)。我需要删除一些被认为无用的代码。但是,当我只是从构建过程中排除那部分代码(即不编译它们)时,最终我在删除链接时出现了“未定义的引用”错误。
当我试图找出其他代码中的引用时,问题就出现了。使用Cscope或OpenGrok,我可以找到一些显式引用,但在删除此类引用后并没有真正帮助。还有许多其他情况间接引用我删除的符号,例如:
virtual functions overridden in child class
"typedef" defined other symbol to refer to this missing symbol.
我的问题是:是否有任何gcc / g ++选项我可以打开所有引用的输出(gcc / g ++知道)直接或间接我删除的符号?
如果没有这样的gcc / g ++选项,还有其他工具可以产生这样的输出吗?
感谢。
答案 0 :(得分:1)
从项目中删除编译单元(c或cpp文件)不会完全删除它们。这些通常只是函数和类的定义。这些函数和类的声明仍然存在于标题中,这些标题可能仍然包含在其他编译单元中。
跟踪声明这些内容的位置(通常在标头文件中),并在标题中注释掉它们,或者如果您的项目中不需要任何内容,请完全停止包含标题。
例如:
如果要从项目中删除foo.c
,请确保已从所有其他c / cpp文件中删除#include "foo.h"
的任何实例