Visual C++ Toolkit 2003 in VC++ 6.0



  • Hallo zusammen,

    ich suche nach einer einfachen Möglichkeit, einen Compilerwechsel durchzuführen. Ich möchte das von Microsoft frei zur Verfügung stehende Visual C++ Toolkit 2003 im Visual Studio 6.0 integrieren, um einen neueren Compiler und die bestehende IDE einzusetzen.

    Die aus einigen Quellen beschriebene Vorgehensweise

    http://pixwiki.bafsoft.com/wiki/index.php/Using_the_Optimizing_VC7_Compiler_with_the_VC6_IDE
    http://www.codecomments.com/archive292-2004-5-196083.html

    ist folgende:
    -Installation des Toolkits
    -Pfadanpassungen der ausführbaren Dateien unter VC++ 6.0
    -Deaktivierung einiger Run-Time Checks, die der VC 7.1 unterstützt
    -Fixen eines sogenannten __ftol2 errors (erstmal uninteressant)

    Leider habe ich hier Probleme 😡 :
    Die dort beschriebenen Schritte funktionieren bei mir in dieser Form nicht.

    Wenn ich nur den Pfad für den Compiler und Linker ändere, kann ich meinen eigenen Code nicht übersetzten:

    ...
    :\Programme\Microsoft Visual Studio\VC98\Include\UTILITY(81) : warning C4346: '_It::iterator_category' : dependent name is not a type
    prefix with 'typename' to indicate a type
    c:\Programme\Microsoft Visual Studio\VC98\Include\UTILITY(84) : see reference to class template instantiation 'std::iterator_traits<_It>' being compiled
    c:\Programme\Microsoft Visual Studio\VC98\Include\UTILITY(81) : error C2146: syntax error : missing ';' before identifier 'iterator_category'
    c:\Programme\Microsoft Visual Studio\VC98\Include\UTILITY(81) : error C2501: 'std::iterator_traits<_It>::iterator_category' : missing storage-class or type specifiers
    c:\Programme\Microsoft Visual Studio\VC98\Include\UTILITY(82) : warning C4346: '_It::value_type' : dependent name is not a type
    ...

    Was wohl daran liegt, dass der neue Compiler nicht mit den "alten - nicht ANSI- konformen" Headerdateien der STL klarkommt.

    Wenn ich die vom Toolkit mitgelieferten Header und libs mit in die globalen Pfade unter "Extras" --> "Optionen" --> "Directories" mitaufnehmen, kann der Code kompiliert werden, aber leider kriege ich das Ganze nicht gelinkt:

    LINK : warning LNK4224: /PDBTYPE is no longer supported; ignored
    ......
    ...obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::basic_string<char,struct std::char_traits<char>,class std::all
    ocator<char> >(char const *)" (__imp_??0?basic_string@DU?basic\_string@DU?char_traits@D@std@@V?allocator@D@2@@std@@QAE@PBD@Z)referencedinfunctionGetVersionString...obj:errorLNK2019:unresolvedexternalsymbol"__declspec(dllimport)public:__thiscallstd::basic_string<char,structstd::char_traits<char>,classstd::allocator<char>>::basic_string<char,structstd::char_traits<char>,classstd::allocator<char>>(unsignedint,char)"(__imp_??0?allocator@D@2@@std@@QAE@PBD@Z) referenced in function _GetVersionString ...obj : error LNK2019: unresolved external symbol "\_\_declspec(dllimport) public: \_\_thiscall std::basic\_string<char,struct std::char\_traits<char>,class std::allocator<char> >::basic\_string<char,struct std::char\_traits<char>,class std::all ocator<char> >(unsigned int,char)" (\_\_imp\_??0?basic_string@DU?char_traits@D@std@@V?char\_traits@D@std@@V?allocator@D@2@@std@@QAE@ID@Z) referenced in function "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl std::operator
    +<char,struct std::char_traits<char>,class std::allocator<char> >(char,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (???HDU??HDU?char_traits@D@std@@V?allocator@D@1@@std@@YA?AV?allocator@D@1@@std@@YA?AV?basic_string@DU?chartraits@D@std@@V?char _traits@D@std@@V?allocator@D@2@@0@DABV10@@Z)
    ...

    Hat jemand irgendeine Idee oder ähnliche Erfahrungen gemacht???

    Besten Dank im Voraus 🙂



  • Der Compiler des VS.NET 2003 wurde stark verbessert und kompiliert manchen Code der noch mit dem VS6 funktioniert hat nicht mehr, weil er nicht dem C++-Standard entspricht.



  • hallo dEUs,

    mit der Antwort gib ich mich in dieser Form so nicht zufrieden 😉

    Ich weiss, dass der VC 7.1 wesentlich strenger ausgelegt ist, siehe auch

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclang/html/vclrfsummaryofcompiler-timebreakingchanges.asp

    Ich habe ja daher ja auch die alten Header-Dateien gegen die neuen ausgetauscht, was dazu führte, dass ich den Code auch kompilieren konnte. Leider klappt das Binden des Objekt-Codes nicht.

    Ich glaube momentan eher, dass ein Mischen von alten Run-Time Bibliotheken mit neuen Run-Time-Libs vorliegt. Mit dem Kompilieren und Erstellen von statischen Bibliotheken habe ich bisher auch keine Probleme, aber das Erstellen von DLLs macht Probleme (hier werden ja auch statische Run-Time Bibliotheken dazugebunden). Momentan verwende ich die Multithreaded DLL Variante als Laufzeit bibliothek, also wird die MSVCRT.LIB benutzt.

    Sieht jemand hier eine Möglichkeit, oder hatte jemand schon ähnliche Probleme??



  • Sorry, hab deinen Text nur überflogen und deswegen nicht mitbekommen, dass das kompilieren inzwischen klappt. Kann dir deswegen auch nciht weiterhelfen.



  • Ich habe ja daher ja auch die alten Header-Dateien gegen die neuen ausgetauscht, was dazu führte, dass ich den Code auch kompilieren konnte. Leider klappt das Binden des Objekt-Codes nicht.

    Nur das? Die Libraries musst du schon auch austauschen 🙄 (Habs ebenfalls nur überflogen)

    MfG SideWinder



  • Hi,

    das Ganze hängt tatsächlich mit den unterschiedlichen Laufzeitbibliotheken zusammen:
    Wenn man als Laufzeitbibliothek Single-Threaded auswählt, gehts, auch die Multihreaded-Variante (nur im Release Modus). Die mulithreaded-dll Variante tut überhaupt nicht, da im Toolkit nur folgende Libs mitgeliefert werden:

    kernel32.lib
    libc.lib und libcd.lib
    libcmt.lib
    libcp.lib und libcpd.lib
    libcpmt.lib
    mscoree.lib
    und oldnames.lib

    Weiss jemand, ob und wo man an die neuen Multihreaded Dll- Libraries rankommt?


Anmelden zum Antworten