GNU und wxWidgets



  • Hi Leute
    Ich will ein Program mit dem GNU compiler übersetzen in dem ich wxwidgets verwende! Ich nutze Fedora und will es folgendermaßen übersetzen:

    $ g++ -Wall window.cpp window.h 'wx-config --cxxflags --libs' -o simple
    g++: wx-config --cxxflags --libs: No such file or directory
    In file included from window.cpp:2:
    /usr/local/include/wx-2.8/wx/wx.h:15:21: error: wx/defs.h: No such file or directory
    /usr/local/include/wx-2.8/wx/wx.h:16:23: error: wx/object.h: No such file or directory
    /usr/local/include/wx-2.8/wx/wx.h:17:25: error: wx/dynarray.h: No such file or directory
    /usr/local/include/wx-2.8/wx/wx.h:18:21: error: wx/list.h: No such file or directory
    /usr/local/include/wx-2.8/wx/wx.h:19:21: error: wx/hash.h: No such file or directory
    /usr/local/include/wx-2.8/wx/wx.h:20:23: error: wx/string.h: No such file or directory
    /usr/local/include/wx-2.8/wx/wx.h:21:24: error: wx/hashmap.h: No such file or directory
    /usr/local/include/wx-2.8/wx/wx.h:22:23: error: wx/arrstr.h: No such file or directory
    /usr/local/include/wx-2.8/wx/wx.h:23:21: error: wx/intl.h: No such file or directory
    /usr/local/include/wx-2.8/wx/wx.h:24:20: error: wx/log.h: No such file or directory
    /usr/local/include/wx-2.8/wx/wx.h:25:22: error: wx/event.h: No such file or directory
    /usr/local/include/wx-2.8/wx/wx.h:26:20: error: wx/app.h: No such file or directory
    /usr/local/include/wx-2.8/wx/wx.h:27:22: error: wx/utils.h: No such file or directory
    /usr/local/include/wx-2.8/wx/wx.h:28:23: error: wx/stream.h: No such file or directory
    /usr/local/include/wx-2.8/wx/wx.h:29:23: error: wx/memory.h: No such file or directory
    /usr/local/include/wx-2.8/wx/wx.h:30:21: error: wx/math.h: No such file or directory
    /usr/local/include/wx-2.8/wx/wx.h:31:26: error: wx/stopwatch.h: No such file or directory
    /usr/local/include/wx-2.8/wx/wx.h:32:23: error: wx/module.h: No such file or directory
    In file included from window.cpp:3:
    window.h:5: error: expected class-name before ‘{’ token
    window.h:9: error: expected class-name before ‘{’ token
    window.h:11: error: ISO C++ forbids declaration of ‘wxChar’ with no type
    window.h:11: error: expected ‘,’ or ‘...’ before ‘*’ token
    window.cpp:7: error: expected constructor, destructor, or type conversion before ‘bool’
    window.cpp:16: error: ISO C++ forbids declaration of ‘wxChar’ with no type
    window.cpp:16: error: expected ‘,’ or ‘...’ before ‘*’ token
    window.cpp: In constructor ‘BasicFrame::BasicFrame(int)’:
    window.cpp:19: error: class ‘BasicFrame’ does not have any field named ‘wxFrame’
    window.cpp:19: error: ‘wxFrame’ was not declared in this scope
    window.cpp:19: error: expected primary-expression before ‘)’ token
    window.cpp:20: error: ‘title’ was not declared in this scope
    window.cpp:21: error: ‘xpos’ was not declared in this scope
    window.cpp:21: error: ‘ypos’ was not declared in this scope
    window.cpp:21: error: ‘wxPoint’ was not declared in this scope
    window.cpp:22: error: ‘width’ was not declared in this scope
    window.cpp:22: error: ‘height’ was not declared in this scope
    window.cpp:22: error: ‘wxSize’ was not declared in this scope
    window.h:5: error: expected class-name before ‘{’ token
    window.h:9: error: expected class-name before ‘{’ token
    window.h:11: error: ISO C++ forbids declaration of ‘wxChar’ with no type
    window.h:11: error: expected ‘,’ or ‘...’ before ‘*’ token
    [Albert@localhost XwxWidgets]$ ./simple
    bash: ./simple: No such file or directory
    [Albert@localhost XwxWidgets]$ g++ -Wall window.h window.cpp `wx-config --cxxflags --libs` -o window
    window.h:5: error: expected class-name before ‘{’ token
    window.h:9: error: expected class-name before ‘{’ token
    window.h:11: error: ISO C++ forbids declaration of ‘wxChar’ with no type
    window.h:11: error: expected ‘,’ or ‘...’ before ‘*’ token
    [Albert@localhost XwxWidgets]$ g++ main.cpp main.h simple.cpp simple.h  `wx-config --cxxflags --libs` -o simple
    g++: main.cpp: No such file or directory
    g++: main.h: No such file or directory
    g++: simple.cpp: No such file or directory
    g++: simple.h: No such file or directory
    [Albert@localhost XwxWidgets]$ g++ main.cpp main.h simple.cpp simple.h  `wx-config --cxxflags --libs` -o simple
    g++: main.cpp: No such file or directory
    g++: main.h: No such file or directory
    g++: simple.cpp: No such file or directory
    g++: simple.h: No such file or directory
    [Albert@localhost XwxWidgets]$ g++ window.cpp window.h  `wx-config --cxxflags --libs` -o simple
    window.h:5: error: expected class-name before ‘{’ token
    window.h:9: error: expected class-name before ‘{’ token
    window.h:11: error: ISO C++ forbids declaration of ‘wxChar’ with no type
    window.h:11: error: expected ‘,’ or ‘...’ before ‘*’ token
    

    Wie ihr seht kommen unzählbare Fehlermeldungen und ich weis nicht warum!? Mein Quellcode:
    window.h

    //base.h
    #ifndef WINDOW_H
    #define WINDOW_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();
    };
    

    window.cpp

    // base.cpp
    #include </usr/local/include/wx-2.8/wx/wx.h>
    #include "window.h"
    
    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() { }
    

    Was mach ich da falsch? also ich müsste die includes und so richtig installiert haben, da diese unter usr/local/lib/wx/ lauter object datein header finden kann!



  • Hallo

    Entweder musst dz die Header-Dateien nach "/usr/local/include" und die Obj-Datei nach "/usr/local/lib" kopieren. Oder du gibst die Pfade direkt beim Compiler-Aufruf mit an. "-I{PFAD}" sollte für die Includes helfen.

    Und um dir kurz zu erklären wieso, in der Datei "wx.h" wird indirekt die Datei "wx/defs.h" includiert. Diese wird im Verzeichnis "/usr/local/include" gesucht, solange du keine weiteren Pfade angibst, was zu diesem Dateipfad führt:
    /usr/local/include/wx/defs.h
    und da die Datei aber in diesem Pfad liegt (wenn ich es richtig gesehen hab):
    /usr/local/include/wx-2.8/wx/defs.h
    kann er Sie nicht finden. => "No such file or directory"

    OT:
    Direkt Pfadangaben solltest du _NIE_ verwenden, so wie hier:

    #include </usr/local/include/wx-2.8/wx/wx.h>
    

    sondern so:

    #include <wx/wx.h>
    

    Dann würdest du auch gleich merken das dein Ordner "wx" falsch liegt und zwar eine Eben zutief (wx-2.8), oder der passende Pfad nicht angegeben wurde.

    Mfg marc-o



  • Ja ok aber wie geb ich den den Pfad den mit an? Gibts bei Fedora auch sowas wie Systemvariablen die der Compiler dann durchsucht? So weit ich weis gibt das bei Windows oder?
    Habs jetzt mit Code::Blocks versucht und das funktioniert einwandfrei...



  • Dein 'wx-config --irgendwelche_flags' funktioniert nicht. Ich selbst habe so etwas noch nicht hingekriegt (unter Windows), aber jemand hat gemeint, man müsse keine Hochkommas, sondern ` oder ´ benutzen.



  • wxNewb schrieb:

    Ja ok aber wie geb ich den den Pfad den mit an? Gibts bei Fedora auch sowas wie Systemvariablen die der Compiler dann durchsucht? So weit ich weis gibt das bei Windows oder?
    Habs jetzt mit Code::Blocks versucht und das funktioniert einwandfrei...

    Ohne gemein zu werden, aber "Wer lesen kann ist klar im Vorteil". Less doch mal bitte denn ersten Satz von mir laut und deutlich durch:

    Marc-O schrieb:

    Hallo

    Entweder musst dz die Header-Dateien nach "/usr/local/include" und die Obj-Datei nach "/usr/local/lib" kopieren. Oder du gibst die Pfade direkt beim Compiler-Aufruf mit an. "-I{PFAD}" sollte für die Includes helfen.
    ....

    Da steht doch, das du _entweder_ die Header-Dateien nach /usr/local/include kopieren sollst _ODER_ das du den Pfad beim Compiler-Aufruf mit "-I{PFAD}" angibst.

    Und auch Windows gibt es keine Pfade für die Includes. Es gibt eine PATH-Variable, aber diese wird nur für ausführbare Dateien benutzt und _NICHT_ für Includes.

    Mfg marc-o



  • [quote="wxSkip"]Dein 'wx-config --irgendwelche_flags' funktioniert nicht. Ich selbst habe so etwas noch nicht hingekriegt (unter Windows), aber jemand hat gemeint, man müsse keine Hochkommas, sondern ` oder ´ benutzen.[/quote]

    Richtig. `wx-config --irgendwelche_flags`.


Anmelden zum Antworten