SORU
9 HAZİRAN 2010, ÇARŞAMBA


'MSVCRT' çatışmalar ile defaultlib LNK4098 çözme:

Bu uyarı:

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

oldukça yaygın bir uyarı Visual Studio ' diyoruz . Ve doğru yol için tam nedenini anlamak istiyorum () hallederim.

Bu bir hata ayıklama, /MDd ile inşa derlenmiş olarak geliyor. Proje windows Version.dll MSVCRT.dll kendileri ile bağlantısı olan pdh.dll gibi şeylere bağlı. Belli ki, bu hata ayıklama sürümleri yok ve bunları derlemek.

Linker komut satırına /NODEFAULTLIB:MSVCRT ekledim ve aslında uyarı kaldırmak oldu. Ama bu tam olarak ne yapıyor? Ve neden gereklidir?

CEVAP
9 HAZİRAN 2010, ÇARŞAMBA


CRT bağlantı kitaplıkları vc\lib: mevcut 4 versiyonu vardır

  • libcmt.lib: sürüm oluşturma (/MT) için statik CRT bağlantı kitaplığı
  • libcmtd.lib: bir hata ayıklama derlemesi (/MTd) statik CRT bağlantı kitaplığı
  • msvcrt.lib: CRT DLL sürüm Sürüm (/MD) ithal kitaplık
  • msvcrtd.lib: CRT (/MDB) hata ayıklama DLL sürümü için alma kitaplığı

Linker seçenekleri, Proje Özellikleri, Linker Komut Satırı bak. Bu kütüphaneler burada bahsedilmeyen nasıl not. Linker otomatik olarak derleyici tarafından kullanılan ve rakamlar .lib #pragma comment Direktif ile bağlantılı olmalıdır. Biraz önemli, eğer /M seçeneği ve arasında bir uyumsuzluk olursa orada bağlantı hataları ve sabit çalışma zamanı hataları teşhis etmek için korkunç olsun istiyorum .size link lib.

Linker her iki bağlantı için msvcrt için söyledim alıntı hata iletisini görürsünüz.libvelibcmt.lib. Eğer /MD ile bağlı kodu /MT ile derlenen kod bağlantı olmayacak. CRT yalnızca bir sürümü olabilir.

/NODEFAULTLIB linker MT derlenmiş /kodundan oluşturulan #pragma comment Direktifi görmezden söyler. Bu diğer linker hataları ile ilgili bir takım değil nadir olsa da işe yarayabilir. Şeyler gibibir hata oluştuğunustatik CRT sürümünde dışarıdan bir int ama-ed makro DLL sürümü bir işlevi olan., Diğerleri gibi.

Bu sorun, Doğru Yolu düzeltmek, bulmak .n ya .lib yanlış /M seçeneği ile derlenen bağlantı kurduğunuz dosya. Eğer hiçbir ipucu varsa, grepping tarafından bulabilirsiniz ./n.lib dosyalarını"". /MT

Btw: işin yapılması için çalıştırılabilir (version.dll kendi CRT sürümü olan Windows. C:\windows\system32 olamaz güvenilir bir şekilde kendi programları için kullanın, CRT başlıklarını herhangi bir yerde mevcut değildir yer almaktadır. CRT DLL programı tarafından kullanılan farklı bir ad (msvcrt90.dll gibi) sahiptir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Top Gear

    Top Gear

    27 Mart 2006
  • wwjoshdew

    wwjoshdew

    1 AĞUSTOS 2007
  • Yanko Kral

    Yanko Kral

    8 HAZİRAN 2006