首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++ VS2008链接器错误(已经定义)只需添加#VS2008

C++ VS2008链接器错误(已经定义)只需添加#VS2008
EN

Stack Overflow用户
提问于 2014-01-29 20:06:09
回答 1查看 898关注 0票数 0

我有一个用VS2008 C++编写的应用程序,它已经正确工作了很长一段时间。它由几个静态库项目组成,这些项目都链接到一个.exe中。

在一些维护过程中,我在一个静态库项目中添加了一个额外的# .cpp文件,导致exe (一个单独的项目)拒绝链接。如果我删除了违规的#include (并尝试重新考虑维护更改),那么问题就解决了,但是很明显,有些地方不太正确,我需要了解它的真相。

链接错误是:

代码语言:javascript
运行
复制
Error   3   error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) already defined in LIBCMTD.lib(new.obj)   nafxcwd.lib
Error   4   error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) already defined in LIBCMTD.lib(dbgdel.obj) nafxcwd.lib
Error   5   error LNK2005: "void __cdecl operator delete[](void *)" (??_V@YAXPAX@Z) already defined in LIBCMTD.lib(delete2.obj) nafxcwd.lib
Error   6   fatal error LNK1169: one or more multiply defined symbols found Tmtka.exe   1

这通常指向各种.lib和可执行文件所使用的CRT库的版本(静态版本和动态版本)的不一致。但是,所有.lib和可执行文件都是使用"/MT“和”在静态库中使用MFC“构建的。

另一个难题是,当所有的.lib(s)和可执行文件一致地设置为"/MD“和”在共享DLL中使用MFC“时,问题就消失了。但是,由于理想情况下,我们希望继续尽可能地发布静态链接(自包含)应用程序,因此我们想弄清楚如何解决这个问题,同时继续使用"/MT“和”在静态库中使用MFC“。

没有使用明确的第三方库,但是VS2008很可能会链接到引擎盖下的一些可以动态链接到CRT或MFC的库,从而导致这个问题。但是,为什么在经过多年的成功运作之后,通过简单引入这个不幸的#include指令,这个问题才会在现在才显现出来?

可能是图书馆的排序问题吗?

“附加属地”中的明确库被排序,以至于那些依赖他人的图书馆首先出现,即使MSCV链接器据称没有像gcc所说的那样严重地避免出现问题。但我有一种感觉,如果这是一个间歇性的排序问题,它可能更多地与隐藏依赖项下的排序有关。

我怎么才能开始想办法解决这个问题?我该用什么工具?我尝试过depends.exe,但它似乎不想打开.lib文件(我试图确保理解它们的依赖关系)

请帮帮我..。

EN

回答 1

Stack Overflow用户

发布于 2015-04-08 09:57:52

我也遇到过同样的问题。当我用MFC静态链接编译我的项目时,出现了这个问题,并且我在我的项目中添加了另一个库,它也使用MFC静态链接。将预编译头的C++项目选项更改为/Yu (使用预编译标头的)具有魔力。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21441493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档