2011-02-26 75 views
2

我正在編寫應用程序並鏈接到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庫。

回答

6

在項目配置中的vs2005中,在鏈接器選項下,我將libcmt.lib設置爲「忽略特定庫」。 vs2010的配置可能類似。無論如何,請嘗試忽略libcmt.lib,看看會發生什麼。

- pete