WxWidgets Installiren



  • Ich möchte In C++ mit GUI Programmierung anfangen.

    Dazu will ich WxWidgets verwenden.

    Ich finde aber nur englische Anleitungen zur Installation.

    Ich habe folgenden IDE'S:

    -Dev-CPP
    -Microsoft visual c++ 2010 express edition

    Wie kann ich WxWidgets auf einer dieser Plattformen installieren?

    ich will folgenden Code verwenden:

    #include <wx/wx.h>
    
    	class HalloWeltApp : public wxApp {
    	   public: virtual bool OnInit();
    	};
    
    	class BasicFrame : public wxFrame {
    	public:
    	   BasicFrame( const wxChar *title,
    	               int xpos, int ypos,
    	               int width, int height);
    	   ~BasicFrame();
    	};
    
    	IMPLEMENT_APP(HalloWeltApp)
    
    	bool HalloWeltApp::OnInit() {
    	   BasicFrame *frame =
    	      new BasicFrame( wxT("Hallo Welt"), 50, 50, 450, 300);
    	   frame->Show(TRUE);
    	   SetTopWindow(frame);
    	   return TRUE;
    	}
    
    	BasicFrame::BasicFrame (
    	   const wxChar *title,
    	   int xpos, int ypos,
    	   int width, int height)
    	   : wxFrame ( (wxFrame *) NULL,
    	               -1, title,
    	               wxPoint(xpos, ypos),
    	               wxSize(width, height)) { }
    
    	BasicFrame::~BasicFrame() { }
    


  • Englisch ist unabdingbar zu Verwendung von wxWidgets oder QT.



  • Ich möchte WxWidgets auch nur Installieren kann mir da jemand helfen?
    Wie geht das?



  • Hi,

    habe auch ein Problem mit wxWidgets...ich will nicht extra ein thread deswegen aufmachen, wenn hier schon einer offen ist.

    Habe Visual Studio 2010 Ultimate...

    Ich hab das mal nach diesem Hinweis installiert:

    - in Umgebungsvariable neue Systemvariable WXWIDGETS mit Pfadangabe zum wxWidgets Verzeichnis...dann aus dem buid/msw/ Ordner mit visual die wx.dsw ausgeführt um die Bibliotheken zu erstellen

    - zuletzt die Projektmappe erstellt...

    und jetzt gerade hier gelesen http://wiki.wxwidgets.org/Microsoft_Visual_C%2B%2B_Guide#Getting_started dass die 2.8. Version garnicht von Visual Studio 2010 unterstützt wird...

    Wie kann ich das wieder deinstallieren bzw. soll ich stattdessen diese hier installoieren? http://forums.wxwidgets.org/viewtopic.php?t=27630



  • Das mit den Umgebungsvariablen ist absoluter Blödsinn in meinen Augen.
    Kann man bei VC++ 2010 keine Verzeichnisse mehr angeben, die dem Compiler- bzw Linkerpfad hinzugefügt werden?



  • bei Projekteigenschaften kann man noch weitere include verzeichnisse einfügen also quasi das verzeichnis von wxwidgets...

    Ich glaube ich installier mal die 2.9. Version....

    Muss ich die erzeugten bibliotheken wieder löschen bzw. wxWidgets deinstallieren, oder reicht es einfach Visual zu schließen, Verzeichnis löschen und einfach den 2.9. installer zu starten?



  • pawl schrieb:

    bei Projekteigenschaften kann man noch weitere include verzeichnisse einfügen also quasi das verzeichnis von wxwidgets...

    Ich glaube ich installier mal die 2.9. Version....

    Muss ich die erzeugten bibliotheken wieder löschen bzw. wxWidgets deinstallieren, oder reicht es einfach Visual zu schließen, Verzeichnis löschen und einfach den 2.9. installer zu starten?

    Installer?
    Nein, du musst die compilierten Dateien nicht löschen.
    Einfach wxWidgets bauen und die Pfade zu Visual Studio hinzufügen:

    include - wxWidgets\include und wxWidgets\lib\<compilername>\mswu
    lib - wxWidgets\lib\<compilername>\



  • ja die wxWidgets 2.9.2 Vers. hat nen .exe Installer für Windows...

    hab ja die 2.8 drauf, und die wx bibliotheken erzeugen lassen, wenn ich jetzt die 2.9.2 installiere und die Bibliotheken aus dem quellcode wieder erzeuge, gibts hoffentlich keine Konflikte mit der 2.8er Version...

    http://www.wxwidgets.org/downloads/



  • Was muss ich machen wenn ich WxWidgets installiert habe mit der Installer EXE?

    Wie gebe ich dem Compiler den Pfad zum Installationsverzeichnis?



  • mischasp schrieb:

    Was muss ich machen wenn ich WxWidgets installiert habe mit der Installer EXE?

    Wie gebe ich dem Compiler den Pfad zum Installationsverzeichnis?

    http://blip.tv/techbytes/howto-install-wxwidgets-for-use-with-visual-studio-express-2008-1074884



  • man ich krieg es auch nicht zum laufen...hab die ganze zeit irgendwelche Linkerfehler...

    1>------ Erstellen gestartet: Projekt: Aufgabe 12.9, Konfiguration: Debug Win32 ------
    1>Der Buildvorgang wurde am 23.09.2011 14:07:51 gestartet.
    1>InitializeBuildStatus:
    1>  Aktualisieren des Timestamps von "Debug\Aufgabe 12.9.unsuccessfulbuild".
    1>ClCompile:
    1>  Alle Ausgaben sind aktuell.
    1>ManifestResourceCompile:
    1>  Alle Ausgaben sind aktuell.
    1>Field.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""wchar_t const * const wxPanelNameStr" (?wxPanelNameStr@@3QB_WB)".
    1>Field.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""protected: void __thiscall wxStringBase::InitWith(wchar_t const *,unsigned int,unsigned int)" (?InitWith@wxStringBase@@IAEXPB_WII@Z)" in Funktion ""public: __thiscall wxStringBase::wxStringBase(wchar_t const *)" (??0wxStringBase@@QAE@PB_W@Z)".
    1>GameOfLife.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""protected: void __thiscall wxStringBase::InitWith(wchar_t const *,unsigned int,unsigned int)" (?InitWith@wxStringBase@@IAEXPB_WII@Z)".
    1>Field.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""void __cdecl wxOnAssert(wchar_t const *,int,char const *,wchar_t const *,wchar_t const *)" (?wxOnAssert@@YAXPB_WHPBD00@Z)" in Funktion ""public: __thiscall wxStringBase::wxStringBase(class wxStringBase const &)" (??0wxStringBase@@QAE@ABV0@@Z)".
    1>GameOfLife.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""void __cdecl wxOnAssert(wchar_t const *,int,char const *,wchar_t const *,wchar_t const *)" (?wxOnAssert@@YAXPB_WHPBD00@Z)".
    1>Field.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""wchar_t const * const wxEmptyString" (?wxEmptyString@@3PB_WB)".
    1>GameOfLife.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""wchar_t const * const wxEmptyString" (?wxEmptyString@@3PB_WB)".
    1>Field.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""protected: virtual bool __thiscall wxColourBase::FromString(wchar_t const *)" (?FromString@wxColourBase@@MAE_NPB_W@Z)".
    1>GameOfLife.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""wchar_t const * const wxFrameNameStr" (?wxFrameNameStr@@3QB_WB)".
    1>main.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual bool __thiscall wxApp::Initialize(int &,wchar_t * *)" (?Initialize@wxApp@@UAE_NAAHPAPA_W@Z)".
    

    sind noch mehr..wollte aber hier nicht seintenweise Fehlermeldungen posten...



  • Benutzt du wxWidgets als DLL?
    Wenn ja, dann musst du WXUSINGDLL zum Präprozessor hinzufügen.
    Hast du die nötigen Libs gelinkt?



  • ne nicht als dll sondern die static Variante

    ja so wie in der Wiki also \lib\vc_lib....\include

    wenn ich z.b. das sample minimal starte, dann läufts...das Gui Fenster wird angezeigt... hab dann versucht, die Projekteigenschaften davon in mein Projekt zu übernehmen...ohne Erfolg

    Aber das ganze noch mit 2.8.12 Vers. parallel könnte ich noch die 2.9.2 installieren und das ganze nochmal erzeugen...



  • Hi!,

    Hab mir auch letztens wxWidgets installiert, und zwar richtig (hoffe ich),
    bekomme leider auch Fehlermeldungen (allerdings nicht die selben).

    D:\wxWidgets-2.8.12\wxWidgets-2.8.12\include\wx\buffer.h||In constructor 'wxCharBuffer::wxCharBuffer(const char*)':|
    D:\wxWidgets-2.8.12\wxWidgets-2.8.12\include\wx\buffer.h|127|error: 'strdup' was not declared in this scope|
    D:\wxWidgets-2.8.12\wxWidgets-2.8.12\include\wx\buffer.h||In member function 'wxCharBuffer& wxCharBuffer::operator=(const char*)':|
    D:\wxWidgets-2.8.12\wxWidgets-2.8.12\include\wx\buffer.h|127|error: 'strdup' was not declared in this scope|
    D:\wxWidgets-2.8.12\wxWidgets-2.8.12\include\wx\buffer.h||In constructor 'wxWCharBuffer::wxWCharBuffer(const wchar_t*)':|
    D:\wxWidgets-2.8.12\wxWidgets-2.8.12\include\wx\buffer.h|134|error: '_wcsdup' was not declared in this scope|
    D:\wxWidgets-2.8.12\wxWidgets-2.8.12\include\wx\buffer.h||In member function 'wxWCharBuffer& wxWCharBuffer::operator=(const wchar_t*)':|
    D:\wxWidgets-2.8.12\wxWidgets-2.8.12\include\wx\buffer.h|134|error: '_wcsdup' was not declared in this scope|
    D:\wxWidgets-2.8.12\wxWidgets-2.8.12\include\wx\string.h||In function 'int Stricmp(const char*, const char*)':|
    D:\wxWidgets-2.8.12\wxWidgets-2.8.12\include\wx\string.h|141|error: 'strcasecmp' was not declared in this scope|
    D:\wxWidgets-2.8.12\wxWidgets-2.8.12\include\wx\list.h||In constructor 'wxListKey::wxListKey(const wxChar*)':|
    D:\wxWidgets-2.8.12\wxWidgets-2.8.12\include\wx\list.h|406|error: 'strdup' was not declared in this scope|
    D:\wxWidgets-2.8.12\wxWidgets-2.8.12\include\wx\list.h||In constructor 'wxListKey::wxListKey(const wxString&)':|
    D:\wxWidgets-2.8.12\wxWidgets-2.8.12\include\wx\list.h|408|error: 'strdup' was not declared in this scope|

    Der Quellcode ist derselbe wie im Anfangspost von pawl, da dacht' ich es passt hier rein ...

    Mein Compiler ist GCC(g++), benutze MinGW mit
    CodeBlocks.

    Gesucht hab' ich im Netz schon länger, finde auch schon Foren wo's diskutiert wurde,
    die Lösungen passen aber nicht
    (Es gibt sogar unter http://www.c-plusplus.net/forum/214573 ungefähr denselben Post, aber keine
    Antwort).

    Wenn mir jemand helfen könnt' würd' ich mich freuen 😋

    VD im Voraus

    🕶



  • @Hacker: Ich glaube, das Problem kenne ich. Ich habe gerade in meinem Gedächtnis rumgekramt und herausgefunden, dass du -std=c++0x aktiviert hast und wxWidgets eigentlich nicht dafür ausgelegt ist. Jedenfalls wird dadurch ein Makro nicht mehr definiert (oder wird es plötzlich definiert?) und dadurch bekommt wxWidgets Probleme. Ich habe das damals durch ein kleines Eingreifen in die #ifdef s im Header umgestellt (der betreffende Code ist sowieso nur ein Versuch einer minimalen Optimierung je nach Compiler).



  • Welchen Header ...?
    c++(0x) Flag macht keinen Unterschied...
    Bald geb' ichs auf 😞



  • Poste mal den Code aus den wxWidgets-Headern an den Stellen aus der Fehlermeldung (grob).



  • Nimm mal 2.9.2.
    Vielleicht geht das besser.
    Hat ne Menge Bugfixes gegenüber der 2.8er Reihe. Die ist bald 5 Jahre alt.



  • Erste Zwei Errors:
    D:\wxWidgets2.8\include\wx\buffer.h|127|error: 'strdup' was not declared in this scope|
    D:\wxWidgets2.8\include\wx\buffer.h|127|error: 'strdup' was not declared in this scope|

    DEFINE_BUFFER(wxCharBuffer, char, wxStrdupA);//Hier
    

    Nächsten 2 (7 Zeilen weiter unten):
    D:\wxWidgets2.8\include\wx\buffer.h|134|error: '_wcsdup' was not declared in this scope|
    D:\wxWidgets2.8\include\wx\buffer.h|134|error: '_wcsdup' was not declared in this scope|

    DEFINE_BUFFER(wxWCharBuffer, wchar_t, wxStrdupW);//Hier
    

    Fünfter:
    D:\wxWidgets2.8\include\wx\string.h|141|error: 'strcasecmp' was not declared in this scope|

    return strcasecmp(psz1, psz2);//Dürfte Klar sein
    

    Letzten zwei:
    D:\wxWidgets2.8\include\wx\list.h|406|error: 'strdup' was not declared in this scope|
    D:\wxWidgets2.8\include\wx\list.h|408|error: 'strdup' was not declared in this scope|

    wxListKey(const wxChar *s) : m_keyType(wxKEY_STRING)
            { m_key.string = wxStrdup(s); }
        wxListKey(const wxString& s) : m_keyType(wxKEY_STRING)
            { m_key.string = wxStrdup(s.c_str()); }
    

    Die Buildlog:

    In file included from D:\wxWidgets2.8\include/wx/string.h:55,
                     from D:\wxWidgets2.8\include/wx/memory.h:16,
                     from D:\wxWidgets2.8\include/wx/object.h:20,
                     from D:\wxWidgets2.8\include/wx\wx.h:16,
                     from D:\C(++) Saves\wxWidgets Applications\TEMP\MAIN.cxx:1:
    D:\wxWidgets2.8\include/wx/buffer.h: In constructor 'wxCharBuffer::wxCharBuffer(const char*)':
    D:\wxWidgets2.8\include/wx/buffer.h:127: error: 'strdup' was not declared in this scope
    D:\wxWidgets2.8\include/wx/buffer.h: In member function 'wxCharBuffer& wxCharBuffer::operator=(const char*)':
    D:\wxWidgets2.8\include/wx/buffer.h:127: error: 'strdup' was not declared in this scope
    D:\wxWidgets2.8\include/wx/buffer.h: In constructor 'wxWCharBuffer::wxWCharBuffer(const wchar_t*)':
    D:\wxWidgets2.8\include/wx/buffer.h:134: error: '_wcsdup' was not declared in this scope
    D:\wxWidgets2.8\include/wx/buffer.h: In member function 'wxWCharBuffer& wxWCharBuffer::operator=(const wchar_t*)':
    D:\wxWidgets2.8\include/wx/buffer.h:134: error: '_wcsdup' was not declared in this scope
    In file included from D:\wxWidgets2.8\include/wx/memory.h:16,
                     from D:\wxWidgets2.8\include/wx/object.h:20,
                     from D:\wxWidgets2.8\include/wx\wx.h:16,
                     from D:\C(++) Saves\wxWidgets Applications\TEMP\MAIN.cxx:1:
    D:\wxWidgets2.8\include/wx/string.h: In function 'int Stricmp(const char*, const char*)':
    D:\wxWidgets2.8\include/wx/string.h:141: error: 'strcasecmp' was not declared in this scope
    In file included from D:\wxWidgets2.8\include/wx\wx.h:18,
                     from D:\C(++) Saves\wxWidgets Applications\TEMP\MAIN.cxx:1:
    D:\wxWidgets2.8\include/wx/list.h: In constructor 'wxListKey::wxListKey(const wxChar*)':
    D:\wxWidgets2.8\include/wx/list.h:406: error: 'strdup' was not declared in this scope
    D:\wxWidgets2.8\include/wx/list.h: In constructor 'wxListKey::wxListKey(const wxString&)':
    D:\wxWidgets2.8\include/wx/list.h:408: error: 'strdup' was not declared in this scope
    

    Werd' 2.9 versuchen. Hört sich vielversprechend an.



  • Wenn du 2.9 versuchst, ist das ja gut, aber hier als Anhaltspunkt für die Fehlersuche:
    strdup() muss irgendwo innerhalb des Makros DEFINE_BUFFER() expandiert werden. Da beim einen Mal das wide-character-strdup verwendet wird, ist strdup/_wcsdup() wahrscheinlich die Ersetzung von wxStrdupA/W. Ist das vielleicht abhängig von irgendwelchen Makros implementiert? Wurde <cstring> oder <string.h> irgendwo inkludiert?
    -Im Internet nach strdup() suchen und danach, ob es im Standard ist oder compiler-spezifisch
    -Ebenso für strcasecmp()
    wxStrdup muss auch ein Makro sein, da dort ein Fehler mit strdup() auftaucht, obwohl strdup() gar nicht dasteht. Auch nachschauen.



  • Imho gibts keinen Grund bei 2.8.2 zu bleiben.
    Und eventuell ist as Problem ja dann gelöst.


Anmelden zum Antworten