如何忽略LNK2005和LNK1169?

Mat*_*Mat 5 c++ linker-errors visual-studio-2010 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

Eli*_*sky 13

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

而不是打击工具,纠正您的代码,以便它编译和链接没有错误.这篇MSDN文章提供了一些有关修复它的信息,以及链接以获取更多信息.

  • @Mat:"最有可能"和"好机会"是不适合编程的概念.链接器是一个计算机程序,一个愚蠢的,顺从的实体,必须确切知道它的输入是什么.修复链接器错误正是您需要做的才能使其工作.也许您想问一个关于*如何修复*项目的新SO问题,详细解释您的库,DLL和项目设置的确切布局.但是,最好将其置于一些失败的最小设置中. (4认同)
  • 但很可能这些定义无论如何都是等效的,不是吗?或者也许我的实际程序将使用任一定义,因为它实际上并没有使用依赖于它的功能 - 所以它很有可能会工作 - 我只需要它运行来测试某些东西 - 正如我所说,我已经阅读并尝试解决该问题的各种方法 (2认同)
  • @Mat只要你对"短期内的任何作品以及将来可能无法预测地破坏"都很好,请坚持下去.但是为什么你会问一个SO的问题,然后忽略你不想听到的所有专家建议? (2认同)

RED*_*AIR 10

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

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