奇怪的链接错误
Strange Linking error
我正在做一个大型的 c++ 项目,并更改其他人的代码。在此期间,我收到一个链接器错误,指出引用VarA
是多个定义的。我找到了相应的变量,并且它已在直接包含在项目中的 cpp 文件中定义。我尝试将源文件转换为头文件和源文件,但不起作用。
然后,我尝试将变量声明移动到仅包含此变量的新单独的 h/cpp 中,如下所示:
H 文件 (AAA.H)
#ifndef AAA_H
#define AAA_H
#include "classAdefinition.h"
extern ClassA VarA;
#endif
CPP 文件 (AAA.cpp)
#include "aaa.h"
ClassA VarA;
如果我现在在主文件中包含aaa.h
,则链接器错误会将新创建的aaa.obj
添加到错误消息中(例如 VarA
也在那里定义),这正是我所期望的。但是当我删除主文件中VarA
的定义时,我收到一个链接器错误,因为VarA
没有定义,这真的很令人困惑。
有没有人知道这种行为的原因是什么?
我正在使用VS2008,并且该项目是用cmake
创建的。这可能会导致问题吗?例如,可能存在配置问题吗?我们也经常使用模板,这会导致问题吗?
为了消除由于多个循环调用而发生的多个定义的错误,我建议您应该做的第一件事是编辑头文件以包含以下宏(无论情况如何)为每个文件指定一个唯一的名称
#ifndef CAR_HPP
#define CAR_HPP
class Car
{
public:
....
protected:
....
};
#endif
我没有发现错误,但现在避免了这个问题,因为大多数第三方代码都已更改并且错误不再发生。
相关文章:
- Netbeans 10:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- CMake 错误:链接器命令失败,退出代码为 1 和 cpp.o 文件
- clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用) - 体系结构的未定义符号 x86_64:
- 如何修复 clang: 错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- Android NDK.Build命令失败.未定义的引用.clang++:错误:链接器命令失败,退出代码为1
- 使用cmake错误链接boost日志
- 错误:链接器命令失败,退出代码为 1(使用 -v 查看调用):在 Macbook 上
- C++ XCODE ld:找不到体系结构x86_64 clang 的符号:错误:链接器命令失败,退出代码为 1(使用 -
- clang:错误:链接器命令失败,C++代码中的退出代码为 1(使用 -v 查看调用)
- 静态库中的 g++ 错误链接函数
- 未定义的参考错误链接天然函数Android
- C++编译错误:ld:找不到体系结构x86_64 clang 的符号:错误:链接器命令失败,退出代码为 1(使用 -v
- QT Q_PROPERTY错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- ld:找不到体系结构x86_64 clang 的符号:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- OSX MOJAVE -LD:架构X86_64 clang找不到符号:错误:链接器命令失败,出口代码1
- C 错误链接器命令失败了出口代码1(使用-V查看调用)
- LD:架构x86_64 clang找不到符号:错误:链接器命令失败,出口代码1(使用-v to See
- 聚输出错误 - 链接列表
- Xcode链接器错误:链接器命令失败,退出代码为1(使用-v查看调用)
- 尝试构建C DLIB示例无法与数百个未定义的参考错误链接