簡體   English   中英

如何在VS2010 Express中使靜態庫的Release / Debug獨立?

[英]How do I make a static library Release/Debug independent in VS2010 Express?

我正在編寫應用程序並針對SDL和OpenGL進行鏈接。 在我的代碼中,我有以下幾行:

#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)" (?_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

我已經從源代碼為我的應用程序編譯了SDL,因此可以控制編譯器標志。

當我為項目SDLMain指定/NODEFAULTLIB:"LIBCMT.LIB“或/ NODEFAULTLIB:” LIBCMT“時,實用程序dumpbin.exe在編譯sdlmain.lib之后仍報告以下內容:

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

當我對opengl.lib(VS2010 Express隨附)使用dumpbin時,這些鏈接器指令不出現。 opengl.lib在發布和調試模式下均可工作。 sdl.lib在發布和調試模式下均可工作,因為我認為它是DLL庫而不是靜態庫。

我在這里做錯了什么?

編輯:

通過將/NODEFAULTLIB:LIBCMT.LIB添加到我自己的Debug配置而不是SDLMain中,我設法使其得以編譯和鏈接。 我還假定OpenGL庫是靜態庫,但不是,它也是DLL庫。

在項目配置的vs2005中,在鏈接器選項下,我將“忽略特定的庫”設置為libcmt.lib。 vs2010的配置可能相似。 無論如何,請嘗試忽略libcmt.lib並查看會發生什么。

-皮特

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM