Quando si collega il mio dll nella build di rilascio ottengo -VC++/DEFAULTLIB problema
1> LINK: LNK4098 avvertimento: defaultlib conflitti 'mfc80d.lib' con utilizzo di altre librerie; uso/NODEFAULTLIB: biblioteca
1> LINK: LNK4098 avvertimento: defaultlib conflitti 'mfcs80d.lib' con utilizzo di altre librerie; uso/NODEFAULTLIB: biblioteca
1> LINK: LNK4098 avvertimento: defaultlib conflitti 'MSVCRTD.LIB' con utilizzo di altre librerie; uso/NODEFAULTLIB: biblioteca
aggiungendo/verbose, vedo il seguente (snippet): ...
1> Ricerca D: \ Microsoft Visual Studio 8 \ VC \ atlmfc \ lib \ mfc80d.lib:
1> Trovato "pubblica: __thiscall virtuale AFX_MODULE_STATE :: ~ AFX_MODULE_STATE (void)" (?? 1AFX_MODULE_STATE @@ UAE @ XZ) 1>
Citato in mfcs80.lib (dllmodul obj) 1> Loaded mfc80d.lib (MFC80D.DLL)1> Trovato "lungo stdcall AfxWndProc (struct HWND__ *, unsigned int , unsigned int, long)" (? AfxWndProc @@ YGJPAUHWND __ @@ IIJ @ Z)
1> Citato in mfcs80.lib (dllmodul.obj) 1> Loaded mfc80d.lib (MFC80D.DLL)
...
Se sto interpretando correttamente, significa che il linker risolve in qualche modo le chiamate dalla libreria (ottimizzata) mfcs80, come chiamate nella libreria (non ottimizzata) mfc80D. Come può essere ??
Quando aggiungo /NODEFAULTLIB:mfc80d.lib gli avvisi sono spariti, ma non sono ancora tranquillo. Per inciso, il modulo in effetti soffre di sporadici crash inesplicabili sui collegamenti incrementali, che vengono risolti solo da una ricostruzione. Sto usando VS2005.
[Modifica:] Modificato il titolo per includere DEFAULTLIB, con la speranza di focalizzare meglio l'argomento. Io faccio vedere una linea esplicita dicendo
elaborati /DEFAULTLIB:mfc80d.lib
nell'output/verbose, tra molti altri movimenti di liberazione (non di debug) di default. Da dove proviene? come posso risolvere questo?
Grazie!
Grazie - ma ho controllato tutti i progetti (e tutti i singoli file), e sono tutti compilati con/MD. Ho pochissime dipendenze esterne: version.dll, shlwapi.dll e un componente di terze parti che ho ispezionato con dependency-walker e sembra collegarsi con le versioni CRT appropriate (non-debug). L'interruttore/MD è infatti l'unico accesso all'interruttore/DEFAULTLIB? Non c'è un altro input che potrebbe averlo incasinato? –