Невозможно связать статическую отладочную сборку pdcurses с VS2013

Я скачал и скомпилировал pdcurses. Как указано в их документации, я использовал:

nmake -f vcwin32.mak DEBUG=Y pdcurses.lib

Я также создаю pdcurses без тега DEBUG, поэтому я могу быть в режиме выпуска.

Теперь у меня есть проект, в котором я хочу статически связать pdcurses. Я использую MT и MTd в качестве библиотек времени выполнения и связываю файлы .lib из сборки DEBUG, когда я нахожусь в отладке, и другие файлы .lib, когда я нахожусь в выпуске.

Когда я создаю свой проект в режиме выпуска, все работает нормально, но когда я пытаюсь создать отладку, возникает ошибка:

1>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)
1>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)
1>LIBCMT.lib(invarg.obj) : error LNK2005: __call_reportfault already defined in LIBCMTD.lib(invarg.obj)
1>LIBCMT.lib(invarg.obj) : error LNK2005: __get_invalid_parameter_handler already defined in LIBCMTD.lib(invarg.obj)
1>LIBCMT.lib(invarg.obj) : error LNK2005: __initp_misc_invarg already defined in LIBCMTD.lib(invarg.obj)
1>LIBCMT.lib(invarg.obj) : error LNK2005: __invalid_parameter already defined in LIBCMTD.lib(invarg.obj)
1>LIBCMT.lib(invarg.obj) : error LNK2005: __invoke_watson already defined in LIBCMTD.lib(invarg.obj)
1>LIBCMT.lib(invarg.obj) : error LNK2005: __set_invalid_parameter_handler already defined in LIBCMTD.lib(invarg.obj)
1>LIBCMT.lib(invarg.obj) : error LNK2005: ___pInvalidArgHandler already defined in LIBCMTD.lib(invarg.obj)
1>LINK : warning LNK4098: defaultlib 'LIBCMT' conflicts with use of other libs; use /NODEFAULTLIB:library

Есть идеи, в чем может быть проблема?


person Spartakos    schedule 14.11.2014    source источник


Ответы (1)


Вы ссылаетесь как на статическую среду выполнения отладки, так и на выпуск, не делайте этого. Если вы не знаете, какая из ваших библиотек вызывает проблему, см. это руководство для шагов по обнаружению этого.

person sjdowling    schedule 14.11.2014
comment
Да, похоже, это проблема, но я этого не делаю. По крайней мере, не специально. Я строю pdcurses во время выполнения отладки, а затем связываюсь с MTd. В чем проблема? - person TheCrafter; 14.11.2014