msvc 2005 express: *.obj benutzen/einbinden/was auch immer



  • Hallo liebe Gemeinde, ich hab hier mal ein 'kleines' Problemchen:

    Im Rahmen meines Studiums 'durfte'/'darf' ich auch in den Genuss kommen, mich an C++ zu versuchen. D.h. im Klartext, dass wir Aufgaben zu lösen haben. War ja auch nicht so schwierig. Aufgabenstellung, msvc 6.0, code, fertig. Alles auch schon erledigt, und läuft. Aber halt msvc 6.0.

    Unser Prof gab/gibt uns zu machen Aufgaben .h/.obj-Dateien, meist ein Interface, um nicht alles selbst basteln zu müssen. Aber der Inhalt is nebensächlich. Die .obj ist logischer Weise beim Erstellen mit msvc 6.0 rausgepurzelt. Es hat gereicht, wenn wir im Studio die .obj zum Projekt hinzugefügt haben (so weit ich mich daran erinnern kann), und schon konnte man, wenn man die entsprechende .h eingebunden hat, auch damit arbeiten.

    Jetz is die ganze Geschichte schon ein bichen zurück, und ich wollte die Aufgaben mal mit meinem jetzigen "Wissen(?)" nochmal basteln. Und mit msvc 2005 Express.

    Und jetz zum Problem:
    Ich komm mit den .obj nich klar. Haufenweise Linker-Fehler (LNK2005).

    Meine Befürchtung:
    Die 'alten' .obj kann ich verheizen, der Prof. müsste mir welche mit dem 'neuen' Studio compilierten geben.

    Meine Hoffnung:
    Jemand von eucht kennt sich besser aus als ich, was ja auch nich allzu schwer ist, und kann mir sagen was ich machen muss.

    hier sogar die Fehlermeldung(en):

    ------ Build started: Project: test, Configuration: Debug Win32 ------
    Linking...
    msvcprtd.lib(MSVCP80D.dll) : error LNK2005: "public: void __thiscall std::basic_ios<char,struct std::char_traits<char> >::clear(int,bool)" (?clear@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXH_N@Z) already defined in FHString.obj
    msvcprtd.lib(MSVCP80D.dll) : error LNK2005: "public: class std::basic_ostream<char,struct std::char_traits<char> > & __thiscall std::basic_ostream<char,struct std::char_traits<char> >::operator<<(unsigned int)" (??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@I@Z) already defined in FHString.obj
    msvcprtd.lib(MSVCP80D.dll) : error LNK2005: "public: void __thiscall std::basic_ios<char,struct std::char_traits<char> >::setstate(int,bool)" (?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXH_N@Z) already defined in FHString.obj
    msvcprtd.lib(MSVCP80D.dll) : error LNK2005: "public: int __thiscall std::ios_base::width(int)" (?width@ios_base@std@@QAEHH@Z) already defined in FHString.obj
    msvcprtd.lib(MSVCP80D.dll) : error LNK2005: "public: int __thiscall std::basic_streambuf<char,struct std::char_traits<char> >::sputn(char const *,int)" (?sputn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHPBDH@Z) already defined in FHString.obj
    msvcprtd.lib(MSVCP80D.dll) : error LNK2005: "public: static bool __cdecl std::char_traits<char>::eq_int_type(int const &,int const &)" (?eq_int_type@?$char_traits@D@std@@SA_NABH0@Z) already defined in FHString.obj
    msvcprtd.lib(MSVCP80D.dll) : error LNK2005: "public: static int __cdecl std::char_traits<char>::eof(void)" (?eof@?$char_traits@D@std@@SAHXZ) already defined in FHString.obj
    msvcprtd.lib(MSVCP80D.dll) : error LNK2005: "public: int __thiscall std::basic_streambuf<char,struct std::char_traits<char> >::sputc(char)" (?sputc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHD@Z) already defined in FHString.obj
    msvcprtd.lib(MSVCP80D.dll) : error LNK2005: "public: class std::basic_streambuf<char,struct std::char_traits<char> > * __thiscall std::basic_ios<char,struct std::char_traits<char> >::rdbuf(void)const " (?rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEPAV?$basic_streambuf@DU?$char_traits@D@std@@@2@XZ) already defined in FHString.obj
    msvcprtd.lib(MSVCP80D.dll) : error LNK2005: "public: char __thiscall std::basic_ios<char,struct std::char_traits<char> >::fill(void)const " (?fill@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEDXZ) already defined in FHString.obj
    msvcprtd.lib(MSVCP80D.dll) : error LNK2005: "public: int __thiscall std::ios_base::flags(void)const " (?flags@ios_base@std@@QBEHXZ) already defined in FHString.obj
    msvcprtd.lib(MSVCP80D.dll) : error LNK2005: "public: int __thiscall std::ios_base::width(void)const " (?width@ios_base@std@@QBEHXZ) already defined in FHString.obj
    msvcprtd.lib(MSVCP80D.dll) : error LNK2005: "public: static unsigned int __cdecl std::char_traits<char>::length(char const *)" (?length@?$char_traits@D@std@@SAIPBD@Z) already defined in FHString.obj
    msvcprtd.lib(MSVCP80D.dll) : error LNK2005: "public: class std::basic_ostream<char,struct std::char_traits<char> > & __thiscall std::basic_ostream<char,struct std::char_traits<char> >::flush(void)" (?flush@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@XZ) already defined in FHString.obj
    msvcprtd.lib(MSVCP80D.dll) : error LNK2005: "public: class std::basic_ostream<char,struct std::char_traits<char> > * __thiscall std::basic_ios<char,struct std::char_traits<char> >::tie(void)const " (?tie@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEPAV?$basic_ostream@DU?$char_traits@D@std@@@2@XZ) already defined in FHString.obj
    msvcprtd.lib(MSVCP80D.dll) : error LNK2005: "public: bool __thiscall std::ios_base::good(void)const " (?good@ios_base@std@@QBE_NXZ) already defined in FHString.obj
    LINK : fatal error LNK1104: cannot open file 'libcpd.lib'
    

    Am Quellcode hab ich nix gändert, also müsste(!) er funktionieren, wie er das schon getan hat.

    Und, was meint ihr?



  • Du kannst STL-Dinge und sonstige MFC/ATL Abhängigkeiten, die in einer LIB/OBJ sind nur mit der MS-Compiler-Version linken, mit der Du diese auch erstellt hast!!!
    Somit kannst Du keine LIB/OBJ-Datei welche STL verwendet und mit VC6 erstellt wurde mit VC8 verwenden.



  • Danke für die Bestätigung. Dacht mir das schon. Hätt nur einfach gern ein bischen mit dem neuen Studio gebastelt.


Anmelden zum Antworten