5

所以我有一个使用外部库的 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

4

2 回答 2

11

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

不要与该工具作斗争,而是更正您的代码,使其编译和链接时不会出错。这篇 MSDN 文章有一些关于修复它的信息,以及更多信息的链接。

于 2010-11-03T08:10:21.683 回答
11

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

链接器错误有时可能很难解决,但通常只能在迁移或设置项目后完成。这可能需要相当长的时间 - 有时我花了一天以上的时间,但应该正确完成。

于 2010-11-03T08:48:56.300 回答