MrP*_*low 2 c++ linker-errors box2d sfml
基本上我试图让SFML和Box2D在VS2012下一起工作.我让他们两个独立工作,但我不能让他们一起工作.
如果我尝试一起运行它们,我会得到一堆:
error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MDd_DynamicDebug' doesn't match value 'MTd_StaticDebug' in Main.obj
Run Code Online (Sandbox Code Playgroud)
如果我将属性中的RuntimeLibrary值从MDd更改为MTd,则会出现一堆错误,例如:
error LNK2005: __amsg_exit already defined in MSVCRTD.lib(MSVCR110D.dll)
error LNK2005: __cexit already defined in MSVCRTD.lib(MSVCR110D.dll)
error LNK2005: __exit already defined in MSVCRTD.lib(MSVCR110D.dll)
Run Code Online (Sandbox Code Playgroud)
一堆那些以及两个警告:
warning LNK4098: defaultlib 'MSVCRTD' conflicts with use of other libs; use /NODEFAULTLIB:library`
warning LNK4098: defaultlib 'libcmtd.lib' conflicts with use of other libs; use /NODEFAULTLIB:library
Run Code Online (Sandbox Code Playgroud)
如果我也不工作,我得到一堆类似的错误:
error LNK2001: unresolved external symbol __purecall
对于SFML,我非常肯定我正确地构建了它.另一方面,对于Box2D,我不太确定.我使用了本指南,你可以看到它适用于VS2010.但是我在构建和HelloWorld.cpp示例时没有遇到任何问题.
那么我可以做些什么来完成这项工作?
编辑:我已经让它工作,但只有调试版本我做的是我尝试重建Box2D库作为/ MTd进行调试和/ MT发布调试一个内置正常,而发布版本没有.
调试版本工作正常,但发布版本抛出
warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:library
Run Code Online (Sandbox Code Playgroud)
和错误几乎与本文中的第二个错误列表相同
对此有何解决方案?
EDIT_2:似乎问题出在dll文件中.我重建了SFML,现在它似乎正在工作.我稍后会做一些测试,以确定我是否已修复它.
所以我修复了它,这是如何.
首先要做的事情.如果你得到一堆链接器错误,那么你可能在链接库时搞砸了一些东西.检查IDE中的链接器设置.
我搞砸的是,我正在更改Project Studio属性中的运行时库值 - > C/C++ - > Visual Studio 2012中的代码生成设置(出于某种未知原因).这导致了众多的链接器错误.
在我最终修复了我的应用程序成功编译后,但是在尝试运行它时,我得到了:
The application was unable to start correctly (0xc000007b). Click OK to close the application
Run Code Online (Sandbox Code Playgroud)
这看起来是错误的.dll文件.我使用CMake重建了最新的SFML2,然后在VS2012中重建了lib和dll,现在一切正常.
我仍然不确定是什么原因导致他们在第一时间停止正常工作,因为之前我使用过这些相同的.dll文件,他们突然开始把这个错误扔给我.
从我可以收集的内容(0xc000007b)可以链接到:
问题是由于Visual Studio所需的各种系统dll的32/64位不匹配.不知何故,它需要的dll被无法加载的64位版本所取代.
资料来源:MSDN论坛
所以这可能是我的问题.
那么我从中学到了什么: