5.2.20
04/03/20
Last Modified 12/18/12 by Walter Tasin
OOP_VS2010Lib Reload Page

Einbinden einer Bibliothek unter VisualStudio 2010

Da ältere Bibliotheken und Objektdateien für VS 6.0 bzw. VS 2005/2008 nicht kompatibel zu VS2010 sind (u. a. wegen neuer Allokationsroutinen) stehen für den Versuch 6 die Bibliotheken für die neuere Visual Studio Versionen zur Verfügung.

Vorgehensweise

  • Erzeugen Sie - wie gehabt - ein Projekt für eine Konsolenapplikation.
    Bei der Erzeugung sollten sich Projektmappenname und Projektname unterscheiden. (z. B. Projektmappenname bzw. Solutionname oop_v6 und Projektname v6_1)
    • Gehen Sie auf die Projekteigenschaften
      Überprüfen Sie, ob unter C/C++ die Laufzeitbibliothek Multithreaded-Debug-DLL gewählt wurde.
      Sollten Sie aktuell im Release-Modus arbeiten, so wählen Sie Multithreaded-DLL.

bib1.jpg

  • Überprüfen Sie auch, ob Sie die CLR (Common Lnguage Runtime) deaktiviert haben und als Zeichensatz der Multi-Byte-Zeichensatz verwendet wird.

bib1-1.jpg

  • Kopieren Sie nun die Bibliothek (z. B. oop_v6-Debug-VS2010.lib) in ein Verzeichnis (z. B. oop_v6_lib) unter dem Projektmappenverzeichnis (z. B. oop_v6).
  • Fügen Sie nun über das Kontextmenü des Projekts ein vorhandenes Element hinzu.
    Klicken Sie dabei mit der rechten Maustaste auf den Projektnamen, damit die Bibliothek nicht in einen Unterordner des Projektexplorers eingefügt wird. Hinweis: Die Bibliothek ist keine Resource-Datei!

bib2.jpg



Mit diesen Einstellungen können Sie nun das Projekt erstellen.

Probleme beim Linkvorgang

Fehlermeldungen

Beispiel 1

<geshi type="bash">3>main.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: void __thiscall Win2RageLCD::textOut(char const *,
unsigned int,struct tagLOGFONTW const *)" (?textOut@Win2RageLCD@@QAEXPBDIPBUtagLOGFONTW@@@Z)".
</geshi>
Dieser Fehler tritt auf, wenn das Projekt als Zeichensatz nicht den Multi-Byte-Zeichensatz verwendet.
Ändern Sie in den Projekteinstellungen unter Konfigurationseigenschaften --> Allgemein den Zeichensatz.

Beispiel 2

<geshi type="bash"> ...
5>rageLCD-Release-VS2010.lib(ExtRageLCD.obj) : error LNK2038: Konflikt ermittelt für "_ITERATOR_DEBUG_LEVEL":
Der Wert "0" stimmt nicht mit dem Wert "2" in main.obj überein.
5>rageLCD-Release-VS2010.lib(SearchHID.obj) : error LNK2038: Konflikt ermittelt für "_ITERATOR_DEBUG_LEVEL":
Der Wert "0" stimmt nicht mit dem Wert "2" in main.obj überein.
5>rageLCD-Release-VS2010.lib(SearchIOW24LCDUSB.obj) : error LNK2038: Konflikt ermittelt für "_ITERATOR_DEBUG_LEVEL":
Der Wert "0" stimmt nicht mit dem Wert "2" in main.obj überein.
</geshi>
Dieser Fehler tritt auf, wenn das Projekt die Release-Bibliothek für die Konfiguration Debug verwendet.
Entfernen Sie für die Projektkonfiguration die Release-Version und fügen die korrekte Bibliothek hinzu.

Beispiel 3

<geshi type="bash"> ...
1>rageLCD-Debug-VS2010.lib(SearchIOW24LCDUSB.obj) : error LNK2038: Konflikt ermittelt für "_ITERATOR_DEBUG_LEVEL":
Der Wert "2" stimmt nicht mit dem Wert "0" in main.obj überein.
1>rageLCD-Debug-VS2010.lib(SearchHID.obj) : error LNK2038: Konflikt ermittelt für "_ITERATOR_DEBUG_LEVEL":
Der Wert "2" stimmt nicht mit dem Wert "0" in main.obj überein.
1>rageLCD-Debug-VS2010.lib(HIDDescr.obj) : error LNK2038: Konflikt ermittelt für "_ITERATOR_DEBUG_LEVEL":
Der Wert "2" stimmt nicht mit dem Wert "0" in main.obj überein.
</geshi>
Dieser Fehler tritt auf, wenn das Projekt die Debug-Bibliothek für die Konfiguration Release verwendet.
Entfernen Sie für die Projektkonfiguration die Debug-Version und fügen die korrekte Bibliothek hinzu.

Beispiel 4

<geshi type="bash"> ...
1>msvcprtd.lib(MSVCP100D.dll) : error LNK2005: "void cdecl std::_Debug_message(wchar_t const *,wchar_t const *,unsigned int)"
(?_Debug_message@std@@YAXPB_W0I@Z) ist bereits in libcpmtd.lib(stdthrow.obj) definiert.
1>msvcprtd.lib(MSVCP100D.dll) : error LNK2005: "void
cdecl std::_Xout_of_range(char const *)" (?_Xout_of_range@std@@YAXPBD@Z)
ist bereits in libcpmtd.lib(xthrow.obj) definiert.
1>msvcprtd.lib(MSVCP100D.dll) : error LNK2005: "public: thiscall std::_Lockit::~_Lockit(void)" (??1_Lockit@std@@QAE@XZ)
ist bereits in libcpmtd.lib(xlock.obj) definiert.
...
1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: "public: virtual char const *
thiscall std::exception::what(void)const "
(?what@exception@std@@UBEPBDXZ) ist bereits in LIBCMTD.lib(stdexcpt.obj) definiert.
1>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: "public: virtual __thiscall std::exception::~exception(void)" (??1exception@std@@UAE@XZ)
ist bereits in LIBCMTD.lib(stdexcpt.obj) definiert.
...
1>LINK : warning LNK4098: Standardbibliothek "MSVCRTD" steht in Konflikt mit anderen Bibliotheken; /NODEFAULTLIB:Bibliothek verwenden.
</geshi>
Dieser Fehler tritt auf, wenn das Projekt die falsche Laufzeitbibliothek verwendet.
Aktivieren Sie die korrekte Laufzeitbibliothek Multithreaded-Debug-DLL (Debug-Konfiguration).

Beispiel 5

<geshi type="bash"> ...
1>msvcprt.lib(MSVCP100.dll) : error LNK2005: "void cdecl std::_Xout_of_range(char const *)" (?_Xout_of_range@std@@YAXPBD@Z)
ist bereits in libcpmt.lib(xthrow.obj) definiert.
1>msvcprt.lib(MSVCP100.dll) : error LNK2005: "void
cdecl std::_Xlength_error(char const *)" (?_Xlength_error@std@@YAXPBD@Z)
ist bereits in libcpmt.lib(xthrow.obj) definiert.
...
1>::~basic_streambuf<char,struct std::char_traits<char> >(void)" (??1?$basic_streambuf@DU?$char_traits@D@std@@@std@@UAE@XZ)
ist bereits in libcpmt.lib(cout.obj) definiert.
1>MSVCRT.lib(MSVCR100.dll) : error LNK2005: _memmove ist bereits in LIBCMT.lib(memmove.obj) definiert.
1>MSVCRT.lib(ti_inst.obj) : error LNK2005: "private: thiscall type_info::type_info(class type_info const &)"
(??0type_info@@AAE@ABV0@@Z) ist bereits in LIBCMT.lib(typinfo.obj) definiert.
1>MSVCRT.lib(ti_inst.obj) : error LNK2005: "private: class type_info &
thiscall type_info::operator=(class type_info const &)"
(??4type_info@@AAEAAV0@ABV0@@Z) ist bereits in LIBCMT.lib(typinfo.obj) definiert.
1>LINK : warning LNK4098: Standardbibliothek "MSVCRT" steht in Konflikt mit anderen Bibliotheken; /NODEFAULTLIB:Bibliothek verwenden.
</geshi>
Dieser Fehler tritt auf, wenn das Projekt die falsche Laufzeitbibliothek verwendet.
Aktivieren Sie die korrekte Laufzeitbibliothek Multithreaded-DLL (Release-Konfiguration).

Warnmeldungen

Die meisten Warnung beziehen sich auf unterschiedliche Konfigurationseinstellungen zwischen Bibliothek und Applikation.
Meldungen wie die folgende können beruhigt ignoriert werden.

<geshi type="bash"> 1> rageLCD-Debug-VS2010.lib(SearchHID.obj) : Es wurde ein mit /GL kompiliertes MSIL .netmodule oder module gefunden.
Verknüpfung wird mit /LTCG erneut gestartet. Fügen Sie /LTCG zur Linkbefehlszeile hinzu, um die Linkerleistung zu erhöhen.
1>LINK : warning LNK4075: /INCREMENTAL wird aufgrund der Angabe von /LTCG ignoriert.
</geshi>






Zurück zu den Versuchsanleitungen OOP