wxWidgets und Visual c++ 2005Express Edition - es will nicht!



  • Hallo,

    ich bin langsam am verzweifeln und weiß nicht mehr weiter.

    Folgendes:
    Ich bin neu im Bereich c++ und habe mir das Buch "C++ von a bis Z" gekauft und erfolgreich gelesen. Auf meiner Linux-Kiste kann ich jetzt auch meine kleinen Hilfsprogramme schreiben. Allerdings habe ich zu Hause einen Mac (weil nur da Logic läuft), einen Linux-Rechner (mein Datei-Server wenn man so will) und 2 PCs ("normale" Arbeitsstationen, Win XP). Folglich möchte ich natürlich Programme schreiben, die zumindest auf Mac UND Windows laufen. Also steht im schlauen Buch man braucht Cross-Plattform. Ich habe nur gutes von wxWidgets gelesen und mich deshalb entschieden dieses zu nutzen, auch weil im Buch eine Anleitung steht und viele Dokus im Netz wandeln.

    Nachdem ich einen Compiler für Windows gesucht habe, hatte ich mir wxDev-C++ heruntergelden. Mit nichtigem Erfolg. Über Google habe ich erfahren, das dieses Programm nicht mehr entwickelt wird und man es nicht mehr nehmen sollte. Alternative war Visual C++ Express Edition.

    Also das Programm heruntergeladen, registriert, SDK installiert, die Umgebungsvariablen ergänzt!

    Das Visual C++ Express Edition läuft. Ich hab auch meine windows.h!

    Was allerdings nicht klappt ist das wxWidgets nach der ofiziellen Aleitung von der wxWiki-Seite zu installieren. Da steht ich soll die Projektdatei öffnen, meine Umgebungsvariable ins Visual c++ Express Edition eintragen und dann einen Batch machen und diesen Compelieren (währenddessen einen Film gucken). So einfach soll es sein.

    Nach dem ersten Durchgang der Batch habe ich dann im Verzeichnis von wxWidgets ca. 200 neue Dateien gehabt und der Bericht sagt mir, das er viele Dateien nicht gefunden hat. Google hat mir verraten, das man den Batch einfach öfters aufrufen soll, bis er alle Dateien gefunden hat und linken kann. Also habe ich jetzt sieben mal das Batch ausgeführt. Die ersten fünf Mal wurden die Anzahl der Fehler immer weniger. Die letzten zwei Mal habe ich aber immer 48 Fehler und 0 übersprungen. Die Fehler sehen eigentlich immer gleich aus:

    glcanvas.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__UnregisterClassA@8" in Funktion ""public: static void __cdecl wxGLModule::UnregisterClasses(void)" (?UnregisterClasses@wxGLModule@@SAXXZ)".
    glcanvas.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__ReleaseDC@8" in Funktion ""public: virtual __thiscall wxGLCanvas::~wxGLCanvas(void)" (??1wxGLCanvas@@UAE@XZ)".
    glcanvas.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__CreatePalette@4" in Funktion ""public: class wxPalette __thiscall wxGLCanvas::CreateDefaultPalette(void)" (?CreateDefaultPalette@wxGLCanvas@@QAE?AVwxPalette@@XZ)".
    glcanvas.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__DescribePixelFormat@16" in Funktion ""public: class wxPalette __thiscall wxGLCanvas::CreateDefaultPalette(void)" (?CreateDefaultPalette@wxGLCanvas@@QAE?AVwxPalette@@XZ)".
    glcanvas.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__GetPixelFormat@4" in Funktion ""public: class wxPalette __thiscall wxGLCanvas::CreateDefaultPalette(void)" (?CreateDefaultPalette@wxGLCanvas@@QAE?AVwxPalette@@XZ)".
    glcanvas.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__SwapBuffers@4" in Funktion ""public: void __thiscall wxGLCanvas::SwapBuffers(void)" (?SwapBuffers@wxGLCanvas@@QAEXXZ)".
    glcanvas.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__RealizePalette@4" in Funktion ""public: void __thiscall wxGLCanvas::OnQueryNewPalette(class wxQueryNewPaletteEvent &)" (?OnQueryNewPalette@wxGLCanvas@@QAEXAAVwxQueryNewPaletteEvent@@@Z)".
    glcanvas.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__SelectPalette@12" in Funktion ""public: void __thiscall wxGLCanvas::OnQueryNewPalette(class wxQueryNewPaletteEvent &)" (?OnQueryNewPalette@wxGLCanvas@@QAEXAAVwxQueryNewPaletteEvent@@@Z)".
    glcanvas.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__UnrealizeObject@4" in Funktion ""public: void __thiscall wxGLCanvas::OnQueryNewPalette(class wxQueryNewPaletteEvent &)" (?OnQueryNewPalette@wxGLCanvas@@QAEXAAVwxQueryNewPaletteEvent@@@Z)".
    glcanvas.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__GetDC@4" in Funktion ""public: __thiscall ScreenHDC::ScreenHDC(void)" (??0ScreenHDC@@QAE@XZ)".
    glcanvas.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__RegisterClassA@4" in Funktion ""public: static bool __cdecl wxGLModule::RegisterClasses(void)" (?RegisterClasses@wxGLModule@@SA_NXZ)".
    glcanvas.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__LoadCursorA@8" in Funktion ""public: static bool __cdecl wxGLModule::RegisterClasses(void)" (?RegisterClasses@wxGLModule@@SA_NXZ)".
    glcanvas.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__SetPixelFormat@12" in Funktion ""public: void __thiscall wxGLCanvas::SetupPixelFormat(int *)" (?SetupPixelFormat@wxGLCanvas@@QAEXPAH@Z)".
    glcanvas.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__ChoosePixelFormat@8" in Funktion ""public: void __thiscall wxGLCanvas::SetupPixelFormat(int *)" (?SetupPixelFormat@wxGLCanvas@@QAEXPAH@Z)".
    

    Den LNK2019 habe ich bei verschiedenen .pbj-Dateien. Und jetzt weiß ich auch nicht mehr weiter. Die Suchmaschinen sagen mir nur das ich alles richtig gemacht habe und es gehen sollte, die Foren sagen das Microsoft sch*** ist und ich soll doch endlich g++ verwenden oder ganz auf Linux umsteigen (ewig dieser Glaubenskrieg) und keiner sagt mir was hier eigentlich schief läuft. Die Hilfe von Microsoft sagt mir das eine Referenz nicht da ist und ich die Datei mit der Referenz neu debuggen soll. Alles jetzt nicht sonderlich hilfreich für mein Problem und mein Newbee-Problem.

    Ich hoffe jemand kann mir weiter helfen. Denn irgendwie weiß ich bald nicht mehr was ich machen kann. Ich möchte doch blos mit wxWidgets Programme schreiben, die auf Mac, Windows und Linux laufen....

    Für jede Hilfe bin ich dankbar.
    Stefan



  • in vcexpress werden die standard-windows-libs nicht eingebunden (die brauchst du aber für windowsprogramme). Deshalb unter projekt-einstellungen-linker-eingabe libs eintragen.

    fand mal an mit user32.lib kernel32.lib dann sollten ein paar fehler weg sein. Dann guckst du jede funktion die noch fehlt im internet nach (aus __imp_xxx wird xxx). In der msdn steht in welcher lib die drin ist, diese lib fügst du dann noch dazu dran und linkst wieder. irgendwann gehts dann.

    btw: vcexpress ist nicht scheiße wie du in diversen foren gelesen hast 😉



  • Ich habe schon mehrmals wxWidgets mit VC++ Express gebaut, über die von dir beschriebenen Probleme bin ich noch nicht gestolpert. Hast du das Platform-SDK richtig nach Anleitung installiert und kannst du das Windows-Projekttemplate kompilieren und linken? Deine Fehlermeldung sieht nämlich danach aus, dass du die Bibliotheks-Verzeichnisse nicht korrekt gesetzt hast. Ansonsten ist das Bauen von wxWidgets kein Problem, was meinst du in diesem Zusammenhang eigentlich mit Batch?

    Grüße

    Martin



  • Hallo,

    danke für die Tipps, ich werde das heute Nachmittag versuchen und hoffe ich komme zum Ziel.

    Hast du das Platform-SDK richtig nach Anleitung installiert und kannst du das Windows-Projekttemplate kompilieren und linken?

    Ich habe in Visual C++ Express Edition auf PSDK downloaden geklickt und dann die Weindos PSDK heruntergeladen und nach Anleitung installiert. Anschließend musste ich noch Umgebungsvariablen setzten und einige TXT-Datenen bearbeiten und die in eueren Threads angezeigten libs in eine Datei eintragen (bzw, nur einen Kommentar herrausnehmen). Mit der PSDK hatte ich keine Probleme und das #include mit diesen Daten funktioniert.

    Ansonsten ist das Bauen von wxWidgets kein Problem, was meinst du in diesem Zusammenhang eigentlich mit Batch?

    Ich habe die folgende Anleitung zum Installieren verwendet:
    http://www.wxwidgets.org/wiki/index.php/MSVC
    Dort steht:

    Batch Building All
    1. Select "Batch Build..." from the Build menu.
    2. Click the "Select All" button to select all projects and configurations (a total of 320 in wxWidgets 2.8).
    3. Click "Build" to start building wxWidgets.

    In meiner deutschen Version von VC++EE steht das unter "Erstellen" => "Batch erstellen".



  • Hallo,
    jetzt habe ich das Problem gefunden. Die PSDK von Microsoft hatte in der Dokumentation die ich benutzt habe einen Schritt vergessen, wie man das Einbindet, somit sind 3 lib-Daten nicht mit eingebunden worden. ICh habe mir ein Video-Toturial heruntergeladen und noch mal alles installiert und jetzt geht die PSDK einwandfrei. Ich hab auch alle Explamles durchgearbeitet, das funzt!

    Danke für den Hinweis schon mal.

    Wenn ich wxWidgets nun compeliere, dann klappt das auch zum größen Teil. Ich hab jetzt nur noch ein paar Fehler im folgenden:

    debugrpt.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual void __thiscall wxStackWalker::Walk(unsigned int,unsigned int)" (?Walk@wxStackWalker@@UAEXII@Z)".
    debugrpt.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual void __thiscall wxStackWalker::WalkFromException(void)" (?WalkFromException@wxStackWalker@@UAEXXZ)".
    

    @maxi: Ich wollte deinen Rat befolgen und dort noch libs suchen gehen die noch fehlen, allerdings finde ich hier kein __imp__ oder anderes woran ich mich orientieren kann.

    Kann mir vielleicht nochmal jemand eine Starthilfe geben. Wäre schade wenn ich die letzten 10 Dateien (soviele läßt er wegen dieser Fehler aus) nicht mehr hinbekommen würde.

    Danke euch,
    Stefan

    edit: Hatte den falschen Fehlercode reinkopiert. Jetzt steht der richtige drinnen.



  • Bei wxPack ist ein Installer für Visual Studio dabei, evtl. versuchst du es mal damit.



  • Lasst es mich mit den Worten von Elton sagen: Ich werd bekloppt! Es geht!

    Mit wxPack hab ich es jetzt hin bekommen.
    Danke!


Anmelden zum Antworten