Как устранить следующие ошибки компоновщика в Visual Studio? - PullRequest
6 голосов
/ 29 мая 2009

Вот мой сценарий. У меня есть проект, который содержит 30 подпроектов. В одном из проектов я использовал CLR (общеязыковая среда выполнения), поэтому я изменил его среду выполнения с помощью / mdd (многопоточная отладочная DLL).

Индивидуально все проекты строятся успешно. Но когда я пытаюсь скомпилировать основной Проект Я получаю следующие ошибки компоновщика:

LINK : warning LNK4098: defaultlib 'MSVCRTD' conflicts with use of other libs; use /NODEFAULTLIB:library


LIBCMTD.lib(winxfltr.obj) : error LNK2005: __XcptFilter already defined in MSVCRTD.lib(MSVCR80D.dll)
LIBCMTD.lib(invarg.obj) : error LNK2005: __invalid_parameter already defined in MSVCRTD.lib(MSVCR80D.dll)
LIBCMTD.lib(invarg.obj) : error LNK2005: __invoke_watson already defined in MSVCRTD.lib(MSVCR80D.dll)
LIBCMTD.lib(crt0.obj) : error LNK2005: _mainCRTStartup already defined in MSVCRTD.lib(crtexe.obj)
LIBCMTD.lib(fclose.obj) : error LNK2005: _fclose already defined in MSVCRTD.lib(MSVCR80D.dll)
LIBCMTD.lib(printf.obj) : error LNK2005: _printf already defined in MSVCRTD.lib(MSVCR80D.dll)
LIBCMTD.lib(mbstowcs.obj) : error LNK2005: _mbstowcs already defined in MSVCRTD.lib(MSVCR80D.dll)
LIBCMTD.lib(dbgrptw.obj) : error LNK2005: __CrtDbgReportW already defined in MSVCRTD.lib(MSVCR80D.dll)
LIBCMTD.lib(wcstombs.obj) : error LNK2005: _wcstombs already defined in MSVCRTD.lib(MSVCR80D.dll)
LIBCMTD.lib(tzset.obj) : error LNK2005: __tzset already defined in MSVCRTD.lib(MSVCR80D.dll)
LIBCMTD.lib(stricmp.obj) : error LNK2005: __stricmp already defined in MSVCRTD.lib(MSVCR80D.dll)

Как решить все это?

Ответы [ 2 ]

22 голосов
/ 03 марта 2010

LIBCMTD является отладочной версией статической многопоточной библиотеки времени выполнения C. MSVCR80D является отладочной версией многопоточной библиотеки C на основе DLL. Некоторые из ваших подпроектов требуют одного, другие - другого. Это беспорядок Microsoft, но вы должны с этим справиться. Выберите одну, скажем, многопоточную отладочную DLL, и используйте ее исключительно для отладочной версии вашего проекта и всех подпроектов. Лицензия Microsoft (как мне сказали) требует, чтобы вы использовали неотлаженную версию для выпущенного программного обеспечения.

Для получения дополнительной информации см. Следующее: ЩЕЛЧОК.

Screenshot

8 голосов
/ 29 мая 2009

Похоже, что некоторые из ваших проектов используют статическую библиотеку времени выполнения. (И вы выбрали динамику для одного из ваших проектов) Эта комбинация не поддерживается.

Напоминает мне: Ошибки компоновщика между несколькими проектами в Visual C ++

...