WxWidgets Installiren



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



  • Hi!

    Ja, hab mir jetzt 2.9.2 geholt, bereits gebaut und es versucht, bekomme aber 'immer noch' zwei Fehler (schon mal ein 'Fortschritt' 😉 ):

    D:\wxWidgets-2.9.2\include\wx\wxcrtbase.h|757|error: '_strdup' was not declared in this scope|
    D:\wxWidgets-2.9.2\include\wx\string.h|177|error: 'strcasecmp' was not declared in this scope|
    

    Da die Leute von wxWidgets selbst sagen, man soll bugs am besten selbst lösen, versuch ichs mal...

    🕶

    Edit:

    Hab' folgende Zeilen gefunden:

    #ifdef HAVE_STRCASECMP_IN_STRINGS_H
        #include <strings.h>    // for strcasecmp()
    #endif // HAVE_STRCASECMP_IN_STRINGS_H
    

    Leider nützt das auskommentieren der #ifdef's nichts..



  • Dann schau doch mal, wo das Makro definiert wird. (HAVE_STRCASECMP_IN_STRINGS_H)


Anmelden zum Antworten