0

我不止一次在使用 g++ 构建代码时遇到以下问题:

一切似乎都很好。你编译,运行然后繁荣 - 一个段错误突然出现在你身上。您开始查看代码,找不到任何东西,执行 make clean && make 并且问题消失了。

我已经看到这种情况发生在不同的 g++ 版本、不同的机器、不同的内核上。

为什么会这样?有没有办法防止它?

4

1 回答 1

2

如果更改了头文件,那么 Makefile 中没有机制来确定哪些源文件包含这些,并且需要重新编译。您可能遇到的一个问题是,如果头文件A.h定义了一个类A,并且您添加或删除或重新排列 的成员A,则该类的大小会发生变化。然而,旧的大小仍在某些源文件中使用,因此当您在堆栈上或在堆。make clean强制传播有关类的新信息,因为所有源文件都必须重新编译。

如果您对头文件进行了重大更改,那么完全重建可能是最安全的。

于 2012-06-14T23:29:55.863 回答