链接器无法链接我的应用程序(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主机.

关于在网页中如何设置下载链接

Branch.io 自定义网址缩短器和通用链接