错误的LNK2005已定义为将C /Fortran解决方案更新为VS 2013
Error LNK2005 already defined on updating C++/Fortran solution to VS 2013
我试图从Visual Studio 2010到2013年更新工作的C 和Fortran解决方案。更新后,Win32平台定期构建,但Win64给出了以下错误:
error LNK2005: __CIpow already defined in libmmt.lib(pow_stub.obj)
error LNK2005: _pow already defined in libmmt.lib(pow_stub.obj)
fatal error LNK1169: one or more multiply defined symbols found
我不知道为什么它仅在Win32上建立,或者我可以做什么来解决此问题。任何帮助都非常感谢。
很难为细节少提供帮助,但这里有一些事情要考虑。
平台依赖代码
您的代码并非不可能 - 例如,您可能具有取决于正在构建的平台的#ifdef
代码。这可能意味着您的Win32和Win64版本正在编译不同的代码。但是,您的代码在Visual Studio 2010中成功构建的事实表明,这不太可能。
这样的变体可能是标准标头,以某种平台依赖性方式在Visual Studio 2010和Visual Studio 2013之间发生了变化。但这再次没有看到 - 不应该仅仅因为包括标头而破裂。
平台依赖性属性
多平台解决方案中建立错误的常见来源是两个平台的项目设置的差异。当然,某些属性假定在Win32和Win64之间是不同的,但其他属性应该是相同的,或者应该是"相同",因为它们使用了同一设置的32和64位版本。
值得浏览所有项目设置,以了解两个平台之间的意外差异。由于您遇到了链接器错误,因此可能特别值得检查链接器的"其他库目录"answers"其他依赖关系"设置。请记住,X64代码必须链接到文件的x64版本 - 通过使用其他文件名或链接到x64特定目录中的文件。
寻找属性变化的一种技巧是打开项目属性并将"平台"设置为"所有平台"。然后查找具有"<不同选项"值的单个属性。我认为在Visual Studio 2013中起作用,它肯定在Visual Studio 2015中起作用(对不起,我没有安装在任何方便的地方)。
Linker Diagnostics
另一种潜在的方法是打开链接器/详细的选项,并比较Win32和Win64构建的输出。将有一个输出的 lot ,但是您可以使用"查找"或diff工具来查找 __CIpow
和 _pow
链接的位置/如何链接的差异,从而可以为您提供线索。坏消息是它可能不会直接指向您的问题。您必须从链接器实际做的事情中向后工作,并结合一些侦探工作和实验,以找出实际发生的事情。
破坏变化
由于您正在从Visual Studio 2010升级到Visual Studio 2013的另一种可能性正在破坏变化。您必须仔细研究Visual Studio 2012中引入的破坏变化列表以及Visual Studio 2013中引入的破坏变化列表,以寻找可能产生您遇到的症状的东西。
事故
如果您还没有这样做,则应确认您的解决方案的Visual Studio 2010版本可为WN32和Win64成功构建。
假设确实如此,请使用您喜欢的DIFF工具比较2010年和2013年版本的.sln和.vcxproj文件。寻找在当前上下文中似乎没有意义的更改。总是有可能无意中改变的东西。
最后,如果您同时安装了Visual Studio 2010和Visual Studio 2013的系统,则可以使用Platform toolset属性使用Visual Studio 2013使用Visual Studio 2010 Toolset构建项目。如果您发现该解决方案已与2010年(V100)工具集成功编译和链接,但可能会因2013(v120)工具集而失败,该工具集可能会告诉您一些东西。
- 运行同一解决方案的另一个项目的项目
- Project Euler问题4的错误解决方案
- 计算每个节点的树高,帮助我解释这个代码解决方案
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- visual c++,如何获取解决方案目录中的代码
- 有没有办法在远程设备上打开和编辑visual Studio 2017解决方案
- C++Matching Brackets 2解决方案不起作用
- 在 ubuntu3 上C++ goto 定义有什么解决方案吗16.04?
- 在 leetcode 上提交解决方案时出现堆栈缓冲区溢出错误
- 我的固定时间步长与增量时间和插值的解决方案是错误的吗?
- 无法在问题解决方案中执行输出逻辑
- 最大的回文产品 - 程序未运行,编写解决方案但无法理解问题
- 从预序遍历构造 bst 的 c++ 和 python 解决方案之间的区别
- 在一个解决方案中针对第三方静态库 (Creo) 的不同版本(版本)进行构建
- 如何巧妙地编写两个函数——一个用于检查是否存在解决方案,另一个用于获取所有解决方案
- 使用 Git 处理 C++ Visual Studio 2019 解决方案的外部依赖项源代码管理的最佳方法是什么?
- N-queen问题:无法弄清楚为什么我的解决方案不起作用
- 从排序数组中删除重复项,具有不同代码方式的相同解决方案具有不同的输出
- 使用XOR查找O(n)-解决方案中的两个字符串是否为变位符
- 错误的LNK2005已定义为将C /Fortran解决方案更新为VS 2013