Я программирую приложение и связываюсь с 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 из исходного кода для своего приложения, поэтому я могу контролировать флаги компилятора.
Когда я указываю / NODEFAULTLIB:«LIBCMT.LIB» или / NODEFAULTLIB: «LIBCMT» для проекта SDLMain, утилита dumpbin.exe по-прежнему сообщает следующее после компиляции для sdlmain.lib:
Linker Directives
-----------------
/DEFAULTLIB:"LIBCMT"
/DEFAULTLIB:"OLDNAMES"
Эти директивы компоновщика не появляются, когда яиспользуйте dumpbin против opengl.lib (который поставляется с VS2010 Express).Opengl.lib работает в режимах Release и Debug.Sdl.lib работает как в режиме выпуска, так и в режиме отладки, потому что, я думаю, это библиотека DLL, а не статическая библиотека.
Что я здесь не так делаю?
РЕДАКТИРОВАТЬ:
Мне удалось его скомпилировать и связать, добавив /NODEFAULTLIB:LIBCMT.LIB в мою собственную конфигурацию Debug вместо SDLMain.Я также предположил, что библиотека OpenGL была статической библиотекой, но это не так, это также библиотека DLL.