1

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

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

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

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

4

2 回答 2

1

重建 SDL 是一种选择吗?如果是这样

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

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

(1)忽略导致LNK2005错误的另一个库(因为您在两个地方定义了一些东西,所以它不知道该使用哪个。由于忽略libcmt.lib引起了很多问题,也许尝试另一个地方定义方法)。

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

于 2014-03-22T07:30:45.047 回答