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