2012-01-17 3 views
12

Overflowers!Koszmar NODEFAULTLIB w projekcie VS2010 C++: linki dobrze w debugowaniu, nie można znaleźć spójnego zestawu bibliotek w wydaniu

Pracuję nad statycznie połączoną aplikacją przy użyciu Visual Studio 2010 (no cóż, jest to platforma wieloplatformowa, ale jest to tylko kwestia systemu Windows).

Miałem kilka problemów z konfiguracją połączenia dla konfiguracji Debugowania, więc nie spodziewałem się, że trudno będzie go zmienić, aby skonfigurować wersję, ale po popołudniowej pracy wciąż mnie nie ma. Próbując różnych wartości dla NODEFAULTLIB albo otrzymuję błędy "nierozwiązanego zewnętrznego symbolu", albo "już zdefiniowane w", a czasem oba.

Z moich notatek wypróbowałem NODEFAULTLIB-ing LIBCMT, MSVCRT, MSVCPRT lub żaden w ogóle, z różnymi wynikami za każdym razem (szczegóły poniżej).

Moja konfiguracja debugowania używa/NODEFAULTLIB: MSVCRTD/NODEFAULTLIB: MSVCPRTD i działa dobrze, więc można by pomyśleć, że/NODEFAULTLIB: MSVCRT/NODEFAULTLIB: MSVCPRT będzie działał w konfiguracji Release. A fakt, że nie jest dla mnie czerwoną flagą ...

Łączę się z kilkoma innymi bibliotekami - Byłem dość ostrożny, aby systematycznie upewnić się, że uważano je za dokładnie takie same podczas przechodzenia z Debugowania na Zwolnij, ale czy to może być problem, a jeśli tak, to jak go systematycznie śledzić?

Dzięki za łaskawy czas!

Na stronie właściwości linii Linker/polecenia Wszystkie opcje to:

/OUT:".\Release\SlowGold 8.exe" /NOLOGO "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" /MANIFEST /ManifestFile:".\Release\SlowGold 8.exe.intermediate.manifest" /ALLOWISOLATION /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /PDB:".\Release\SlowGold 8.pdb" /SUBSYSTEM:WINDOWS /OPT:REF /OPT:ICF /PGD:"C:\development\rec-vs\rec\projects\slow\Builds\VisualStudio2010\Release\SlowGold 8.pgd" /LTCG /TLBID:1 /DYNAMICBASE /NXCOMPAT /MACHINE:X86 /ERRORREPORT:QUEUE 

i Dodatkowe opcje to:

/LIBPATH:..\\..\\..\\..\\externals\\rubberband\\win32\\ipp\\common ippacemerged.lib ippacmerged.lib ippcorel.lib ippsemerged.lib ippsmerged.lib ippsremerged.lib ippsrmerged.lib /LIBPATH:..\\..\\..\\..\\externals\\rubberband\\win32\\ipp\\release\\static rubberband-library.lib /LIBPATH:..\\..\\..\\..\\..\\glog\\Release libglog_static.lib /LIBPATH:..\\..\\..\\..\\..\\mpg123\\ports\\MSVC++\\2008\\Release libmpg123.lib /LIBPATH:..\\..\\..\\..\\..\\protobuf\\vsprojects\\Release libprotobuf.lib 

A oto kilka komunikatów o błędach do różnych/NODEFAULTLIB: wartości.

Najlepszy do tej pory:/NODEFAULTLIB: LIBCMT

1>------ Build started: Project: Slow, Configuration: Release Win32 ------ 
1>msvcprt.lib(MSVCP100.dll) : error LNK2005: "public: __thiscall std::basic_ostream<char,struct std::char_traits<char> >::basic_ostream<char,struct std::char_traits<char> >(class std::basic_streambuf<char,struct std::char_traits<char> > *,bool)" ([email protected][email protected]@[email protected]@@[email protected]@[email protected][email protected][email protected]@[email protected]@@[email protected][email protected]) already defined in libcpmt.lib(cerr.obj) 
1>msvcprt.lib(MSVCP100.dll) : error LNK2005: "void __cdecl std::_Xlength_error(char const *)" ([email protected]@@[email protected]) already defined in libcpmt.lib(xthrow.obj) 
1>msvcprt.lib(MSVCP100.dll) : error LNK2005: "void __cdecl std::_Xout_of_range(char const *)" ([email protected]@@[email protected]) already defined in libcpmt.lib(xthrow.obj) 
1>.\Release\SlowGold 8.exe : fatal error LNK1169: one or more multiply defined symbols found 
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== 

Kolejna próba tylko/NODEFAULTLIB: MSVCRT

1>------ Build started: Project: Slow, Configuration: Release Win32 ------ 
1>msvcprt.lib(MSVCP100.dll) : error LNK2005: "public: __thiscall std::basic_ostream<char,struct std::char_traits<char> >::basic_ostream<char,struct std::char_traits<char> >(class std::basic_streambuf<char,struct std::char_traits<char> > *,bool)" ([email protected][email protected]@[email protected]@@[email protected]@[email protected][email protected][email protected]@[email protected]@@[email protected][email protected]) already defined in libcpmt.lib(cerr.obj) 
1>msvcprt.lib(MSVCP100.dll) : error LNK2005: "void __cdecl std::_Xlength_error(char const *)" ([email protected]@@[email protected]) already defined in libcpmt.lib(xthrow.obj) 
1>msvcprt.lib(MSVCP100.dll) : error LNK2005: "void __cdecl std::_Xout_of_range(char const *)" ([email protected]@@[email protected]) already defined in libcpmt.lib(xthrow.obj) 
1>libglog_static.lib(logging.obj) : error LNK2001: unresolved external symbol __imp__strncat 
1>libglog_static.lib(logging.obj) : error LNK2001: unresolved external symbol __imp__perror 
1>libglog_static.lib(logging.obj) : error LNK2001: unresolved external symbol __imp___pclose 
1>libglog_static.lib(logging.obj) : error LNK2001: unresolved external symbol "__declspec(dllimport) int __cdecl _open(char const *,int,int)" ([email protected]@[email protected]) 
1>libglog_static.lib(logging.obj) : error LNK2001: unresolved external symbol __imp___access 
1>libglog_static.lib(logging.obj) : error LNK2001: unresolved external symbol __imp___popen 
1>libglog_static.lib(logging.obj) : error LNK2001: unresolved external symbol __imp___wassert 
1>libglog_static.lib(logging.obj) : error LNK2001: unresolved external symbol __imp__fdopen 
1>OLDNAMES.lib(fdopen.obi) : error LNK2001: unresolved external symbol __imp__fdopen 
1>libglog_static.lib(logging.obj) : error LNK2001: unresolved external symbol __imp__unlink 
1>OLDNAMES.lib(unlink.obi) : error LNK2001: unresolved external symbol __imp__unlink 
1>libglog_static.lib(utilities.obj) : error LNK2001: unresolved external symbol __imp___getpid 
1>libglog_static.lib(port.obj) : error LNK2001: unresolved external symbol __imp___vsnprintf 
1>libprotobuf.lib(message.obj) : error LNK2001: unresolved external symbol __imp__ldiv 
1>libprotobuf.lib(descriptor.obj) : error LNK2001: unresolved external symbol __imp__ldiv 
1>libprotobuf.lib(extension_set.obj) : error LNK2001: unresolved external symbol __imp__ldiv 
1>libprotobuf.lib(common.obj) : error LNK2001: unresolved external symbol __imp___snprintf 
1>libprotobuf.lib(strutil.obj) : error LNK2001: unresolved external symbol __imp___snprintf 
1>OLDNAMES.lib(fdopen.obi) : error LNK2001: unresolved external symbol __imp___fdopen 
1>OLDNAMES.lib(unlink.obi) : error LNK2001: unresolved external symbol __imp___unlink 
1>.\Release\SlowGold 8.exe : fatal error LNK1120: 15 unresolved externals 
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== 

Bez/NODEFAULTLIB:

1>------ Build started: Project: Slow, Configuration: Release Win32 ------ 
1>msvcprt.lib(MSVCP100.dll) : error LNK2005: "public: __thiscall std::basic_ostream<char,struct std::char_traits<char> >::basic_ostream<char,struct std::char_traits<char> >(class std::basic_streambuf<char,struct std::char_traits<char> > *,bool)" ([email protected][email protected]@[email protected]@@[email protected]@[email protected][email protected][email protected]@[email protected]@@[email protected][email protected]) already defined in libcpmt.lib(cerr.obj) 
1>msvcprt.lib(MSVCP100.dll) : error LNK2005: "void __cdecl std::_Xlength_error(char const *)" ([email protected]@@[email protected]) already defined in libcpmt.lib(xthrow.obj) 
1>msvcprt.lib(MSVCP100.dll) : error LNK2005: "void __cdecl std::_Xout_of_range(char const *)" ([email protected]@@[email protected]) already defined in libcpmt.lib(xthrow.obj) 
1>MSVCRT.lib(MSVCR100.dll) : error LNK2005: __stricmp already defined in LIBCMT.lib(stricmp.obj) 
1>MSVCRT.lib(MSVCR100.dll) : error LNK2005: _strerror_s already defined in LIBCMT.lib(strerror.obj) 
1>MSVCRT.lib(MSVCR100.dll) : error LNK2005: _fflush already defined in LIBCMT.lib(fflush.obj) 
1>MSVCRT.lib(MSVCR100.dll) : error LNK2005: _strtol already defined in LIBCMT.lib(strtol.obj) 
1>MSVCRT.lib(MSVCR100.dll) : error LNK2005: _strrchr already defined in LIBCMT.lib(strrchr.obj) 
1>MSVCRT.lib(MSVCR100.dll) : error LNK2005: __write already defined in LIBCMT.lib(write.obj) 
1>MSVCRT.lib(MSVCR100.dll) : error LNK2005: __close already defined in LIBCMT.lib(close.obj) 
1>MSVCRT.lib(MSVCR100.dll) : error LNK2005: "public: __thiscall std::exception::exception(char const * const &)" ([email protected]@@[email protected]@Z) already defined in LIBCMT.lib(stdexcpt.obj) 
1>MSVCRT.lib(MSVCR100.dll) : error LNK2005: "public: virtual __thiscall std::exception::~exception(void)" ([email protected]@@[email protected]) already defined in LIBCMT.lib(stdexcpt.obj) 
1>MSVCRT.lib(MSVCR100.dll) : error LNK2005: _memmove already defined in LIBCMT.lib(memmove.obj) 
1>MSVCRT.lib(MSVCR100.dll) : error LNK2005: "public: __thiscall std::exception::exception(class std::exception const &)" ([email protected]@@[email protected]@@Z) already defined in LIBCMT.lib(stdexcpt.obj) 
1>MSVCRT.lib(MSVCR100.dll) : error LNK2005: _printf already defined in LIBCMT.lib(printf.obj) 
1>MSVCRT.lib(MSVCR100.dll) : error LNK2005: _fprintf already defined in LIBCMT.lib(fprintf.obj) 
1>MSVCRT.lib(MSVCR100.dll) : error LNK2005: ___iob_func already defined in LIBCMT.lib(_file.obj) 
1>MSVCRT.lib(MSVCR100.dll) : error LNK2005: _abort already defined in LIBCMT.lib(abort.obj) 
1>MSVCRT.lib(MSVCR100.dll) : error LNK2005: _memchr already defined in LIBCMT.lib(memchr.obj) 
1>MSVCRT.lib(MSVCR100.dll) : error LNK2005: __strtoi64 already defined in LIBCMT.lib(strtoq.obj) 
1>MSVCRT.lib(MSVCR100.dll) : error LNK2005: __strtoui64 already defined in LIBCMT.lib(strtoq.obj) 
1>MSVCRT.lib(MSVCR100.dll) : error LNK2005: _strtoul already defined in LIBCMT.lib(strtol.obj) 
1>MSVCRT.lib(MSVCR100.dll) : error LNK2005: __errno already defined in LIBCMT.lib(dosmap.obj) 
1>MSVCRT.lib(MSVCR100.dll) : error LNK2005: _strerror already defined in LIBCMT.lib(strerror.obj) 
1>MSVCRT.lib(MSVCR100.dll) : error LNK2005: _strchr already defined in LIBCMT.lib(strchr.obj) 
1>MSVCRT.lib(MSVCR100.dll) : error LNK2005: _sprintf already defined in LIBCMT.lib(sprintf.obj) 
1>MSVCRT.lib(MSVCR100.dll) : error LNK2005: _strtod already defined in LIBCMT.lib(strtod.obj) 
1>MSVCRT.lib(MSVCR100.dll) : error LNK2005: _strpbrk already defined in LIBCMT.lib(strpbrk.obj) 
1>MSVCRT.lib(ti_inst.obj) : error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" ([email protected]@[email protected]@@Z) already defined in LIBCMT.lib(typinfo.obj) 
1>MSVCRT.lib(ti_inst.obj) : error LNK2005: "private: class type_info & __thiscall type_info::operator=(class type_info const &)" ([email protected]@[email protected]@@Z) already defined in LIBCMT.lib(typinfo.obj) 
1>MSVCRT.lib(MSVCR100.dll) : error LNK2005: __read already defined in LIBCMT.lib(read.obj) 
1>LINK : warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:library 
1>.\Release\SlowGold 8.exe : fatal error LNK1169: one or more multiply defined symbols found 
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== 
+1

'statycznego Rubberband-library.lib',' libglog_static.lib' Release. Zastanawiam się, co "statyczne" może oznaczać w tych nazwach ... –

+0

Jestem statycznie połączony. Dodaję komentarz do tego efektu w oryginalnym poście ... –

+0

OK, już to miałem w pierwszej linii. :-D Powodem jest to, że istnieje wiele dystrybucji tych bibliotek i używam wersji statycznych. To działa dobrze w konfiguracji debugowania ... –

Odpowiedz

15

Hans Passant warunkiem ME klucz do rozwiązania w jego komentarzach do mojego problemu! Gdyby wrócił i nazwał je odpowiedzią, wymazałbym to i przyznałbym mu ...

Zgodnie z przewidywaniami, jedna z zewnętrznych bibliotek nie została ustawiona na/MT w wydaniu (ale była/MTd w debugowaniu) - zmiana tej flagi sprawiła, że ​​wszystko działało.

znajdziesz opcję we właściwościach - C/C++ - Code Generation - Runtime Library

+1

Wygląda na to, że Hans jest na tym punkcie i zasługuje na więcej uwagi (: – Gabriel

+0

To było bardzo pomocne! :) – killdaclick

Powiązane problemy