SDL2,错误LNK2005对象已在libcmt中定义

时间:2014-03-22 07:00:59

标签: c++ linker sdl linker-errors lnk2005

所以这是一个常见错误,但所有帖子都说我需要更加关注我所包含的库版本。我使用的是SDL2,OpenGL和SDL_Mixer ......除了坚持使用32位库之外,我没有任何选择。

Debug编译很好但发布给了我LNK2005错误,除非我将运行时库设置为/ MD。我想避免那种额外的依赖。除非Visual Studio启动发布版本,否则生成的可执行文件将停止响应SDL初始化或某些OpenGL调用。所以我遇到了某种多线程问题,但我并不接近理解它。帮助不大?

更新:/ FORCE:MULTIPLE允许使用/ MT编译项目。但就像使用/ MD一样,除非visual studio启动发布版本,否则生成的可执行文件会崩溃。这是什么意思?

UPDATE2:在SDL项目中使用/ MD。崩溃只是一个内存错误调试器没有捕获。链接是无关的。

2 个答案:

答案 0 :(得分:1)

好的,所以我看到的唯一其他选择是

(1)忽略导致LNK2005错误的其他库(因为你在两个地方定义了一些东西,它不知道要使用哪一个。因为忽略了libcmt.lib导致了很多问题,也许可以尝试定义方法的其他地方。)

2)在链接器命令行选项中使用/ FORCE:MULTIPLE,这将允许多个符号定义。

答案 1 :(得分:1)

重建SDL是一种选择吗?如果是的话

  • 从libsdl.org获取源代码
  • 转到VisualC目录
  • 选择相关解决方案
  • 从那里,对于每个项目,将构建类型从/ MD更改为/ MT
  • rebuild:你现在应该只获得一个构建为/ MT的lib和DLL,并且应该与编译为/ MT的程序链接。您不再需要诉诸/ ignorelibs和/ forcemultiple