我无法解释链接代码时看到的行为。也许有人知道发生了什么...
我有一个多文件 C++ 项目,它使用 GNU automake 工具作为其构建系统(全部在 Linux 上)。
在将源文件和头文件(让我们调用它们util.cc
和util.h
)添加到项目并让已经存在的源文件(calc.cc
)从新添加的文件中调用函数后,我会收到一个链接错误,具体取决于include
语句出现的位置。我再说一遍:错误发生在链接步骤中,编译运行正常!!
例子:
将新的 include 语句放在预先存在的语句的末尾时出现错误,例如:
calc.cc:
#include "file1.h"
#include "file2.h"
#include "file3.h"
#include "file4.h"
#include "util.h" // new header
这个版本编译得很好。但是链接会产生错误(找不到符号)!
现在,当将其更改为
#include "util.h" // new header
#include "file1.h"
#include "file2.h"
#include "file3.h"
#include "file4.h"
然后编译和链接运行正常!
由于链接器只读取.o
文件,这必然意味着根据包含语句出现的位置产生不同的内容。怎么会这样?
编译器是 g++ (GCC) 4.4.6