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++ 中已定义的错误的主要内容,如果未能解决你的问题,请参考以下文章
VC中编译出现error LNK2005:xx already defined in xxx.obj问题解决。
C++ 链接器错误 - 错误 LNK2005: ... 已定义