【发布时间】:2016-08-31 14:29:34
【问题描述】:
我正在使用 VS2005 编译我的程序。我正在链接到 SDL 静态库并收到以下链接器错误;
1>LIBCMTD.lib(fpinit.obj) : error LNK2005: __fltused already defined in SDL2d.lib(SDL_stdlib.obj)
1>LIBCMTD.lib(ftol2.obj) : error LNK2005: __ftol2_sse already defined in SDL2d.lib(SDL_stdlib.obj)
1> Creating library ..\..\..\product\VS2005\libs\\Standalone.lib and object ..\..\..\product\VS2005\libs\\Standalone.exp
1>..\..\..\product\VS2005\libs\\Standalone.exe : fatal error LNK1169: one or more multiply defined symbols found
我使用相同的 VS2005 编译器编译了 SDL2d.lib。我最初的想法是这些项目的运行时库设置不匹配。但是在检查后它们都设置为多线程调试。
我刚刚注意到上面的链接器输出似乎在创建 Standalone.exe 之前创建了 Standalone.lib 和 Standalone.exp。我不知道它为什么要制作 .lib 和 .exp
出现此错误的任何其他原因?
谢谢
【问题讨论】:
-
这意味着您正在使用超过 1 个运行时。在这里,您似乎在同一个应用程序中混合了 Debug 和 Release。
LIBCMTD.lib是调试 CRT 的一部分。LIBCMT.lib是发布 CRT 的一部分。如果您正在构建 Debug 应用程序,请确保不要使用 Release libs 和 viseversa。 -
“但是在检查后它们都设置为多线程调试。” 这不可能是正确的。如果是,您将链接到问题中未提及的另一个库。链接器错误非常清楚地表明冲突库是
LIBCMT,这是发布版本。 -
谢谢,很遗憾我的报价有误。我已经编辑了问题并将 LIBCMT.lib 替换为 LIBCMTD.lib。链接器输出没有提到 LIBCMT.lib,只是在我的复制和粘贴过程中不知何故丢失了。抱歉,问题已编辑
-
编辑只修复了一处。输出还显示:
defaultlib 'LIBCMT' conflicts with use of other libs... -
您显然仍在尝试链接针对两个不同版本 CRT 的目标文件。您的一个或多个项目设置必须不正确,或者必须涉及您没有告诉我们的其他库(并且尚未重建)。这里没有足够的信息来提供任何进一步的帮助。这不是 Visual Studio 中的错误。我已经在 VS 2005 中成功编译并链接了许多项目。
标签: c++ sdl linker-errors