如何在VS2010 Express中独立进行静态库版本/调试?

问题描述:

我正在编写应用程序并链接到SDL和OpenGL。在我的代码中,我有以下几行:如何在VS2010 Express中独立进行静态库版本/调试?

#pragma comment(lib, "sdl.lib") 
#pragma comment(lib, "sdlmain.lib") 
#pragma comment(lib, "opengl.lib") 

这仅适用于发布模式。在调试模式下,我收到以下链接器错误:

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)" ([email protected]@[email protected]) 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)" ([email protected]@[email protected]) 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 

我已经从我的应用程序的源编译SDL,所以我可以控制编译器标志。

当我指定/NODEFAULTLIB:"LIBCMT.LIB”或/ NODEFAULTLIB: “LIBCMT” 为项目SDLMain,公用事业DUMPBIN.EXE仍然报告编制sdlmain.lib后如下:

Linker Directives 
----------------- 
/DEFAULTLIB:"LIBCMT" 
/DEFAULTLIB:"OLDNAMES" 

当我针对opengl.lib(VS2010 Express附带)使用dumpbin时,不会出现这些链接器指令。 opengl.lib在Release和Debug两种模式下工作。 sdl.lib工作在发布模式和调试模式下,因为我认为它是一个DLL库而不是一个静态库。

我在这里做错了什么?

编辑:

我设法得到它通过增加/NODEFAULTLIB:LIBCMT.LIB我自己的调试配置,而不是SDLMain编译和链接。我还假设OpenGL库是一个静态库,但它不是,它也是一个DLL库。

在项目配置中的vs2005中,在链接器选项下,我将libcmt.lib设置为“忽略特定库”。 vs2010的配置可能类似。无论如何,请尝试忽略libcmt.lib,看看会发生什么。

- pete