如何忽略LNK2005& LNK1169?

时间:2010-11-03 07:50:15

标签: c++ visual-studio-2010 linker-errors lnk2005

所以我有一个使用外部库的Visual Studio 2010项目,为了在没有LNK2005的情况下进行编译,我不得不在链接器设置中使用库的顺序来处理它。

我让它在发布模式下编译得很好,但出于任何原因我无法在调试时没有LNK错误进行编译。

是否通常无法忽略LNK2005并告诉链接器只使用他遇到的任何内容?

谢谢!

//编辑:这里是一些特殊问题输出的错误。但是我已经尝试以不同的方式解决这个问题,每个解决方案给我带来不同的链接器问题因此我正在寻找忽略LNK2005的一般解决方案

Error 7 error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) already defined in Libcmtd.lib(typinfo.obj) ...\msvcprtd.lib(MSVCP100D.dll)

Error 8 error LNK2005: "private: class type_info & __thiscall type_info::operator=(class type_info const &)" (??4type_info@@AAEAAV0@ABV0@@Z) already defined in Libcmtd.lib(typinfo.obj) ...\msvcprtd.lib(MSVCP100D.dll)

Error 9 error LNK2005: _exit already defined in Libcmtd.lib(crt0dat.obj) ...\msvcprtd.lib(MSVCP100D.dll)

Error 10 error LNK2005: __invalid_parameter already defined in Libcmtd.lib(invarg.obj) ...\msvcprtd.lib(MSVCP100D.dll)

...

Error 37 error LNK1169: one or more multiply defined symbols found

2 个答案:

答案 0 :(得分:13)

你绝对不能忽视链接器错误!链接器告诉你它对在多个地方定义的符号感到困惑 - 它应该从哪里获取定义?你真的希望它是武断的吗?当您更改代码并且链接器随机决定采用可能会突然破坏您的代码的其他定义时呢?

不要打击工具,而是更正您的代码,以便编译和链接没有错误。 This MSDN article有一些关于修复它的信息,以及更多信息的链接。

答案 1 :(得分:10)

您可以尝试使用“项目属性”的“链接器常规”选项卡中的链接器选项/ FORCE(强制文件输出)。即使发生此类错误,这也会强制链接器创建exe / dll。但是它留给你去了解这个exe是否真的起作用或者甚至是正确的。毕竟我不推荐这种策略。

链接器错误有时可能很难解决,但通常只有在迁移或设置项目后才能完成。这可能需要一段时间 - 有时候我花了一天多时间,但应该做得恰到好处。