链接器无法链接我的应用程序(XXXX 已在 XXXX.obj 中定义)
Posted
技术标签:
【中文标题】链接器无法链接我的应用程序(XXXX 已在 XXXX.obj 中定义)【英文标题】:Linker fails to link my application (XXXX already defined in XXXX.obj) 【发布时间】:2010-02-17 12:21:03 【问题描述】:当我尝试构建我的应用程序时,链接器会出现 大量错误,如下所示:
modlauch.obj:错误 LNK2005:“公共: 虚拟 __thiscall lolbutton::~lolbutton(void)" (??1lolbutton@@UAE@XZ) 已定义 在 lolbutton.obj 中
我怀疑它与错误配置的编译器有关,但我不知道如何修复它。我的课程只包含一次,所以我认为它与代码没有任何关系。我已尝试重建和清理该项目,但它没有帮助。
有人可以提出解决这个问题的方法吗?我的平台是 Win32(C++),我正在使用 MFC。
【问题讨论】:
是类向导O.o创建的空类 这是lolbutton和modlauch的代码 您的 lolbutton.h 以 ifndef 开头和结尾的一些唯一值声明以防止多次插入? 【参考方案1】:这样编写类时会出现链接器错误:
lolbutton.h:
class lolbutton
public:
virtual ~lolbutton();
;
lolbutton::~lolbutton()
// something...
这样写你不会明白的:
class lolbutton
public:
virtual ~lolbutton()
// inlined something...
;
通过将析构函数定义从 .h 文件移动到 .cpp 文件来修复链接器错误。这确保了析构函数只有一个定义。
【讨论】:
【参考方案2】:您是否会多次包含您的 lolbutton.h 文件?像这样:
//file: something.h
#include <lolbutton.h>
//... do code
//file: something_other.h
#include <lolbutton.h>
//file: main.cpp
#include <something.h>
#include <something_other.h>
【讨论】:
这会导致编译时错误(符号已定义),但似乎提问者正在报告链接器错误【参考方案3】:猜测 - 没有看到代码 - 你有没有机会将 lolbutton 的析构函数放在标题中而不声明它inline
?根据您的描述,如果您最终在多个翻译单元中使用析构函数的实例,这可能是罪魁祸首。
【讨论】:
编译时不会出错,但链接时会出错。【参考方案4】:我会使用 lolbutton.h 的多个包含,因此我对将内容包装在“if !defined someUUID”块中的评论或者可能与使用预编译头有关。
【讨论】:
我也认为这个问题与预编译的头文件有关。以上是关于链接器无法链接我的应用程序(XXXX 已在 XXXX.obj 中定义)的主要内容,如果未能解决你的问题,请参考以下文章
“错误:Grunt :: 在 127.0.0.1 上启动检查器:xxxx 失败:地址已在使用中”
修改 glibc 动态链接器以检查共享库是不是已在另一个进程中加载
VS远程开发(远程调试)编译报错:对‘xxx’未定义的引用(设置库依赖顺序)(已解决)pthread(项目-->属性-->链接器-->输入-->库依赖项)
linux下打开网页时,总提示:"载入http://www.xxxx.com时出错,无法连接到www.xxx.com主机.