2009-05-29 17 views
6

İşte Benim senaryo'm. 30 alt proje içeren bir projem var. Projelerden birinde CLR (ortak dil çalışma zamanı) kullandım, böylece çalışma zamanını/mdd (multi-threaded debug DLL) ile değiştirdim.Visual Studio'da aşağıdaki linker hataları nasıl giderilir?

Tek tek tüm projeler başarıyla oluşturulmuştur.

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) 

Nasıl bunların hepsi çözmek için: Ben ana proje derlemeye çalıştığınızda Ama şu bağlayıcı hataları alıyorum?

cevap

22

LIBCMTD statik çok kanallı C çalışma zamanı kütüphanesinin ayıklama sürümü: içinde

hatırlatıyor. MSVCR80D, DLL tabanlı çok iş parçacıklı C çalışma zamanı kitaplığının bir hata ayıklama sürümüdür. Alt projelerinizden bazıları, bazıları diğerini arıyor. Bu bir Microsoft karmaşası, ama bununla uğraşmak zorundasın. Birden çok iş parçacığı hata ayıklama DLL'sini seçin ve yalnızca projenizin ve tüm alt projelerin Hata Ayıklama sürümü için kullanın. Microsoft lisansı (söylendi), yayımlanmış yazılım için hata ayıklamayan bir sürümünü kullanmanızı gerektirir. CLICK.

Screenshot

+2

Dip not:

fazla bilgi için aşağıya bakın Her şeyi C çalışma zamanının (CRT) tek bir sürümüne dönüştürdüğünüzde, her projede ayrı olarak "temizle" ve "yeniden oluştur" projelerini gerçekleştirin. –