因此,我有一个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

有帮助吗?

解决方案

您可以尝试链接器选项 /力(在项目属性的“链接器常规”选项卡中的力文件输出)。这将迫使链接器即使发生此类错误,也会迫使链接创建EXE/DLL。但是它剩下的是找出此EXE是否确实有效或什至正确。毕竟,我不建议这种策略。

链接器错误有时可能很乏味,但通常只有在迁移或设置项目后才必须完成。这可能需要一段时间 - 有时我花了一天的时间要花更多的时间,但是应该正确地完成。

其他提示

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

而不是对该工具进行战斗,而是更正您的代码,以使其在没有错误的情况下编译和链接。 这篇MSDN文章 有一些有关修复它的信息,以及链接以获取更多信息。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top