LNK2005:删除 VC++ 中已定义的错误

Posted

技术标签:

【中文标题】LNK2005:删除 VC++ 中已定义的错误【英文标题】:LNK2005: delete already defined error in VC++ 【发布时间】:2010-05-11 08:24:33 【问题描述】:

我之前也问过这个问题:

LNK2005: delete already defined error in VC++

我得到的答案是我应该使用动态版本的 DLL。我这样做了,它编译得很好。 现在,但是当我将 exe 交给我的一位同事运行时,他们告诉我 - 他们无法运行它,因为它需要一些共享的 dll,所以他们需要一个静态的。 当我尝试进行静态构建时,我会收到上一个链接中提到的错误。 做,我需要提供一些其他文件以及exe。 我在构建目录中也有 .lib 文件。我也提供一个吗?

我可以在我的 m/c 上运行它,放在我放置的任何目录中。

非常感谢任何帮助,因为我真的被困住了。

提前致谢, 苏西塔

【问题讨论】:

您是否将 *.dll 提供给您的同事? 【参考方案1】:

见Microsoft's Scenarios for Deployment Examples(这包括2和3)

有3种方式

1) 单独安装 Visual Studio 可再发行包作为@Vicky 的回答

2) 构建包含 Visual Studio 可再发行包的安装包

3) 将 C++ Dll 复制到与您的应用相同的目录See heading Deploying Visual C++ library DLLs as private assemblies

【讨论】:

【参考方案2】:

他们可能只需要为您构建的任何版本的 Visual Studio 安装 Visual Studio 可再发行包。您可以从 MS 下载。

【讨论】:

做,我需要在我的 m/c 上安装它,或者任何使用此应用程序的人都需要安装它。但是我不能要求我的客户在他们的 m/c 上安装一些额外的包。 任何使用该应用程序的人都需要安装它。理想情况下,您应该将可再发行安装程序与您的应用程序打包在一个可安装包中。 您可以添加 Release 和 Debug 也不同:需要在 Release 中构建程序才能在未安装 Visual Studio 的机器上运行它(例如:microsoft.com/downloads/… )【参考方案3】:

如果您链接到动态 RTL,则动态 RTL 必须存在于您要运行可执行文件的系统上。在这些机器上安装可再发行包。随您的程序提供的安装程序会执行此操作。

除非您非常清楚自己在做什么,否则当您将不同的 EXE/DLL 链接在一起时,您不应该链接到静态 RTL。

【讨论】:

以上是关于LNK2005:删除 VC++ 中已定义的错误的主要内容,如果未能解决你的问题,请参考以下文章

error:LNK2005 已经在*.obj中定义

VC中编译出现error LNK2005:xx already defined in xxx.obj问题解决。

C++ 链接器错误 - 错误 LNK2005: ... 已定义

在 Windows (VC90) 中使用 C 绑定构建 Python 包导致 LNK1181 致命错误

关于LNK2005的错误

c++链接器错误LNK2005已经在SDL中定义