wxWidgets - Linker error



  • Hallo!

    Da ich schon die Grundlagen der C++ Programmierung verstanden habe, möchte ich nun mit der GUI-Programmierung beginnen. Ich habe ein Buch, bei dem wxWidgets behandelt wird. Allerdings lässt sich das Beispielprogramm mit meinem Compiler (wxDev-C++ 4.9.9.2 IDE mit Standard Compiler) die Datei nicht Compilieren (Ich habe auch schon die Bordsuche benutzt, aber nichts gefunden). Ich erhalte folgende Fehlermeldung:

    [Linker error] undefined reference to `wxAppConsole::CheckBuildOptions(char const*, char const*)' 
      [Linker error] undefined reference to `wxEntry(HINSTANCE__*, HINSTANCE__*, char*, int)' 
      [Linker error] undefined reference to `wxFrameNameStr' 
    ...
    

    Wo liegt der Fehler? Wie kann ich den Linker meiner IDE richtig einstellen? (wenn das der Fehler ist, was ich vermute)

    Danke schonmal für eure Antworten!



  • 1. Wechsel zu Code::Blocks (aktuelle Version).
    2. Mach dich mit dem Linker vertraut (Stichwort Bibliotheken einbinden).



  • Hallo!

    Ich habe mir jetzt Code::Blocks und wxWidgets-2.8.4 heruntergeladen. Was muss ich jetzt noch in Code::Blocks einstellen, damit es funktioniert?

    Ich habe schon ein paar Einstellungen ausprobiert, es hat aber nicht geklappt.
    Ich bin schon am verzweifeln.

    Tobias



  • Vielleicht musst du die Lib zuerst kompilieren? Sind denn im lib-Ordner von wxWidgets schon Library-Files drin?



  • Ich habe folgende Dateien mit der Endung .lib im Verzeichnis

    C:\wxWidgets-2.8.4\lib\vc_lib:
    
    wxjpegd
    wxpngd
    wxregexd
    wxzlibd
    

  • Mod

    du brauchst auch wxcore etc.
    Hast du die Library schon kompiliert?



  • Wenn du den Compiler von Visual C++ 2005 Express Edition benutzt, musst du das Platform SDK installieren. Sonst kannst du die Library nicht vollständig kompilieren, da der Express Edition einige Header fehlen.

    Edit: Für den GNU-Compiler (der mit dem Dev kommt) benötigst du allerdings Files mit der Endung *.a.



  • Ich habe mir jetzt auch noch das Platform SDK heruntergeladen, beim Compilieren tritt aber folgende Fehlermeldung auf:

    C:\wxWidgets-2.8.4>cd build\msw
    
    C:\wxWidgets-2.8.4\build\msw>nmake -f makefile.vc
    
    Microsoft (R) Program Maintenance Utility, Version 8.00.50727.42
    Copyright (C) Microsoft Corporation. Alle Rechte vorbehalten.
    
            cl /c /nologo /TC /Fovc_mswd\wxtiff_tif_win32.obj /MDd /DWIN32 /Zi  /Fd.
    .\..\lib\vc_lib\wxtiffd.pdb /D_DEBUG  /Od  /I..\..\src\zlib /I..\..\src\jpeg
    ..\..\src\tiff\tif_win32.c
    tif_win32.c
    ..\..\src\tiff\tif_win32.c(31) : fatal error C1083: Datei (Include) kann nicht g
    eöffnet werden: "windows.h": No such file or directory
    NMAKE : fatal error U1077: ""C:\Programme\Microsoft Visual Studio 8\VC\BIN\cl.EX
    E"": Rückgabe-Code "0x2"
    Stop.
    
    C:\wxWidgets-2.8.4\build\msw>
    

    Was ist jetzt wieder falsch???



  • 1. Irgendwo im wxWidgets Ordner sollte das File wx.dsw vorhanden sein. Öffne dieses Mit Visual C++.

    2. Gib in Visual C++ bei den Optionen die Pfade zum lib-Verzeichnis sowie zu include-Verzeichnis der Platform SDK an. Der Compiler muss wissen wo die zusätzlichen Header und Library-Files sind!

    3. Dann Menü Erstellen->Batch Erstellen. Die Konfigurationen auswählen die du erstellen möchtest (z. B. Debug & Release) und auf Erstellen klicken.


  • Mod

    evtl. hilft auch wxPack, da hats direkt nen installer für MSVC dabei.



  • Ich habe mir jetzt wxPack heruntergeladen, installiert und in Code::Blocks folgende Einstellungen getroffen:

    Settings->Compiler->Linker ca. 250 Bibliotheksdateien hinzugefügt

    Settings->Compiler->Directories->Compiler
    Adresse C:\SourceCode\Libraries\wxWidgets2.8\include
    hinzugefügt

    Settings->Compiler->Directories->Linker
    Adresse C:\SourceCode\Libraries\wxWidgets2.8\lib
    hinzugefügt

    Ist das richtig so? Muss ich sonst noch was machen?



  • Eigentlich müsstest du mit Code::Blocks direkt ein wxWidgets-Projekt erstellen können. Es hat ein Template dafür, wo alles schon eingerichtet ist. Du wirst dann vom Wizard um den ort von wxWidgets befragt.



  • Wenn ich ein Project erstelle, erhalte ich folgende Meldung:

    This template expects wxWidgets to be located at C:\wxWidgets2.6.2. If this is not the case, you will have to update the relevant custom variable accordingly.

    To do this, klick on "Project->Build Options->Custom Variables"

    wxWidgets befindet sich aber genau in dem Verzeichnis.



  • Schau dir nochmal die Versionsnummer an.



  • 🙄 Lies die Message nochmal genau.



  • Entschuldigung, ich sollte noch erwähnen, dass ich in meinem 1.Versuch die Variable angepasst habe, und als dies auch nicht funktioniert hat, habe ich die Datei in wxWidgets-2.6.2 umbenannt und in das entsprechende Verzeichnis verschoben.

    Außerdem erhalte ich nun folgende Fehlermeldung:
    ld.exe: cannot find -lwxmsw26


  • Mod

    Dann funktionierts ja.
    Die Lib kann er nicht finden, weil sie anders heisst.
    Die musst du in das Feld noch einfügen (wxcore etc.)



  • Ich denke du musst im Wizard nur die Variable "wx" definieren. Dort kopierst du einfach den Pfad zu deinem wxWidgets-Ordner rein. Die restlichen Felder brauchst du nicht auszufüllen. Bei mir hat es jedenfalls so funktioniert. Am besten benennst du auch gar nichts in dem wxWidgets-Ordner um, damit schaffst du dir nur Probleme.
    Nicht aufgeben 😉



  • Tobias12 schrieb:

    Entschuldigung, ich sollte noch erwähnen, dass ich in meinem 1.Versuch die Variable angepasst habe, und als dies auch nicht funktioniert hat, habe ich die Datei in wxWidgets-2.6.2 umbenannt und in das entsprechende Verzeichnis verschoben.

    Außerdem erhalte ich nun folgende Fehlermeldung:
    ld.exe: cannot find -lwxmsw26

    Das Template ist schon älter, ändere das einfach in -lwxmsw28, bzw -lwxmsw28u für Unicode Builds. Für die Zukunft kannst du auch einfach das Projekt-Template an sich anpassen.



  • hmmm warum mti wx pack mag ich nich schrenkt ein 😞

    aber der fehler auf der seite davor war bestimt weil du die include dateien des platform sdks nich in das include verzeichniss des compilers Visual 2003 .. kopiert hast , den irgendwie tut der installer vom platform sdk dem kostenlosen compiler nix sagen wo es is und das es jetzt nen neues gibt 😉 aber mit manuellen kopieren mein ich mich zu erinnern ging alles gut (ps: auch schon mal beim V S 2007 gemacht um nen update zu erzwingen )


Anmelden zum Antworten