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
-
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.
-
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ügtSettings->Compiler->Directories->Linker
Adresse C:\SourceCode\Libraries\wxWidgets2.8\lib
hinzugefügtIst 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
-
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 -lwxmsw26Das 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 )