我无法解释我在链接我的代码时看到的行为。也许有人有一个想法是怎么回事...包含语句在链接步骤中的顺序如何?
我有使用GNU Automake工具作为其构建系统(所有Linux下)的多个文件C++项目。
添加源文件和头文件后(让我们称之为util.cc
和util.h
)到项目,并具有调用来自新添加的文件,我具体情况取决于include
得到一个链接错误的功能已经存在的源文件(calc.cc
)声明出现。我再说一遍:错误发生在链接步骤中,编译运行良好!
例子:
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
有可能是在'util.h'中定义的宏防止被包括在随后的头文件中的一个的函数或变量声明。 – hmjd 2012-07-20 10:29:40