gpt4 book ai didi

c++ - include 语句的顺序在链接步骤中有何影响?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:54:45 24 4
gpt4 key购买 nike

我无法解释我在链接代码时看到的行为。也许有人知道发生了什么......

我有一个多文件 C++ 项目,它使用 GNU automake 工具作为其构建系统(全部在 Linux 上)。

在将源文件和头文件(我们称它们为 util.ccutil.h)添加到项目并拥有一个已经存在的源文件( calc.cc) 从新添加的文件中调用一个函数 根据 include 语句出现的位置,我会收到一个链接错误。我再说一遍:错误发生在链接步骤,编译运行正常!!

例子:

将新的 include 语句放在先前存在的语句末尾时出现错误,例如:

计算器:

#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 文件,这必然意味着根据include 语句出现的位置产生不同的内容。怎么会这样?

编译器是 g++ (GCC) 4.4.6

最佳答案

很可能 util.h 有一个#define 来改变其他文件之一的行为。

要弄清楚到底发生了什么,最好的机会是检查这些头文件中缺少符号的名称,并通过“工作”和“非工作”方式编译 calc.cc 获取预处理器输出,并比较这两个文件。

关于c++ - include 语句的顺序在链接步骤中有何影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11577490/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com