Mar*_*tin 2 c++ opengl linker sdl visual-studio-2010
我正在编写应用程序并链接SDL和OpenGL.在我的代码中,我有以下几行:
#pragma comment(lib, "sdl.lib")
#pragma comment(lib, "sdlmain.lib")
#pragma comment(lib, "opengl.lib")
Run Code Online (Sandbox Code Playgroud)
这仅适用于发布模式.在调试模式下,我收到以下链接器错误:
libcmt.lib(invarg.obj) : error LNK2005: __initp_misc_invarg already defined in LIBCMTD.lib(invarg.obj)
libcmt.lib(invarg.obj) : error LNK2005: __call_reportfault already defined in LIBCMTD.lib(invarg.obj)
libcmt.lib(invarg.obj) : error LNK2005: __set_invalid_parameter_handler already defined in LIBCMTD.lib(invarg.obj)
libcmt.lib(invarg.obj) : error LNK2005: __get_invalid_parameter_handler already defined in LIBCMTD.lib(invarg.obj)
libcmt.lib(invarg.obj) : error LNK2005: __invoke_watson already defined in LIBCMTD.lib(invarg.obj)
libcmt.lib(invarg.obj) : error LNK2005: "void __cdecl _invoke_watson(unsigned short const *,unsigned short const *,unsigned short const *,unsigned int,unsigned int)" (?_invoke_watson@@YAXPBG00II@Z) already defined in LIBCMTD.lib(invarg.obj)
libcmt.lib(invarg.obj) : error LNK2005: __invalid_parameter already defined in LIBCMTD.lib(invarg.obj)
libcmt.lib(invarg.obj) : error LNK2005: "void __cdecl _invalid_parameter(unsigned short const *,unsigned short const *,unsigned short const *,unsigned int,unsigned int)" (?_invalid_parameter@@YAXPBG00II@Z) already defined in LIBCMTD.lib(invarg.obj)
libcmt.lib(invarg.obj) : error LNK2005: ___pInvalidArgHandler already defined in LIBCMTD.lib(invarg.obj)
libcpmtd.lib(xdebug.obj) : warning LNK4098: defaultlib 'libcmt.lib' conflicts with use of other libs; use /NODEFAULTLIB:library
Run Code Online (Sandbox Code Playgroud)
我已经从源代码为我的应用程序编译了SDL,因此我可以控制编译器标志.
当我为项目SDLMain指定/NODEFAULTLIB:"LIBCMT.LIB"或/ NODEFAULTLIB:"LIBCMT"时,实用程序dumpbin.exe在编译sdlmain.lib后仍会报告以下内容:
Linker Directives
-----------------
/DEFAULTLIB:"LIBCMT"
/DEFAULTLIB:"OLDNAMES"
Run Code Online (Sandbox Code Playgroud)
当我对opengl.lib(随VS2010 Express附带)使用dumpbin时,这些链接器指令不会出现.opengl.lib在Release和Debug模式下都有效.sdl.lib在发布和调试模式下都有效,因为我认为它是一个DLL库,而不是一个静态库.
我在这做错了什么?
编辑:
我设法通过将/NODEFAULTLIB:LIBCMT.LIB添加到我自己的Debug配置而不是SDLMain来编译和链接.我还假设OpenGL lib是一个静态库,但它不是,它也是一个DLL库.
在vs2005的项目配置中,在链接器选项下,我将"忽略特定库"设置为libcmt.lib.vs2010配置可能类似.无论如何,请尝试忽略libcmt.lib,看看会发生什么.
- 皮特
| 归档时间: |
|
| 查看次数: |
10868 次 |
| 最近记录: |