wxWidgets - Linker error



  • 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 )



  • Ich habe mir jetzt die neueste Version von Code::Blocks Nightly Builds und die neueste Version des MinGW-Compilers heruntergeladen. Das Compilieren funktionier jetzt wunderbar. (VIEELEN Dank für eure Hilfe, ohne die ich das nicht hingekriegt hätte!!)

    Jetzt bleibt nur noch ein (hoffentlich)kleiner Fehler:
    Wenn ich nun versuche, das erfolgreich compilierte Programm auszuführen, erhalte ich folgende Meldung:

    Die Anwendung konnte nicht gestartet werden, weil wxbase28d_gcc.dll nicht gefunden wurde. Neuinstallation der Anwendung könnte das Problem beheben.

    Die Datei befindet sich in dem Verzeichnis C:\SourceCode\Libraries\wxWidgets2.8\lib\gcc_dll
    Muss ich die Datei dem Compiler noch irgendwie bekannt geben?
    Oder hilft wirklich eine Neuinstallation von Code::Blocks?


  • Mod

    ne, das Programm ist soweit fertig, nur findets die DLL die es braucht nicht.
    Entweder du kopierst die DLL in das Verzeichnis der .exe, oder du linkst gegen statische wxLibs.



  • Ich weiss, dass ich euch langsam auf die Nerven gehe, aber könntet ihr mir noch sagen, wie ich gegen statische wxLibs linken kann?


  • Mod

    Statische Libraries bauen (liegen imho dann in gcc_lib),
    und im wxWizard bei Projekterstellung entsprechend angeben (statisch statt dynamisch).



  • Super!!! Jetzt funktioniert alles!
    Vielen Dank an alle, die mir geholfen haben!

    Tobias


Anmelden zum Antworten