Eclipse, Qt und eine C++ Gui Programme



  • ich versuche ein einfaches Frame/Window in Win7 zu schreiben und öffnen mit C++.
    In dem Qt Creator 5.3 es geht. Nun möchte ich ähnliches mit Eclipse Luna 4.4.0 machen, aber Eclipse findet ein Problem was mir schleierhaft ist.

    in dem Eclipse IDE habe ich alle (!) libraries unter Qt/5.3/mingw482_32/lib importiert, alle *.a, *.prl

    Unten sind die Dateien, Sf.cpp, SfWin.cpp SfWin.h und das console Output von Qt Creator build und Eclipse-MinGW build

    Beide benutzen das gleiche MinGW und beide haben kein SfWin.ui Form damit alles ist so einfach wie möglich

    In Eclipse kein Makefile ist zu finden.

    Also was is los in dem build mit der SfWin.o Datei?

    Qt Creator Build Output - alles okay

    10:11:37: Running steps for project Sf...
    10:11:37: Configuration unchanged, skipping qmake step.
    10:11:37: Starting: "E:\Qt\Tools\mingw482_32\bin\mingw32-make.exe"
    E:/Qt/Tools/mingw482_32/bin/mingw32-make -f Makefile.Release
    mingw32-make[1]: Entering directory 'E:/Qtwp/build-Sf-Desktop-Release'
    E:\Qt\5.3\mingw482_32\bin\uic.exe ..\Sf\sfwin.ui -o ui_sfwin.h
    g++ -c -pipe -fno-keep-inline-dllexport -O2 -frtti -Wall -Wextra -fexceptions -mthreads -DUNICODE -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_NEEDS_QMAIN -I..\Sf -I"..\..\Qt\5.3\mingw482_32\include" -I"..\..\Qt\5.3\mingw482_32\include\QtWidgets" -I"..\..\Qt\5.3\mingw482_32\include\QtGui" -I"..\..\Qt\5.3\mingw482_32\include\QtCore" -I"release" -I"." -I"." -I"..\..\Qt\5.3\mingw482_32\mkspecs\win32-g++" -o release\main.o ..\Sf\main.cpp
    g++ -c -pipe -fno-keep-inline-dllexport -O2 -frtti -Wall -Wextra -fexceptions -mthreads -DUNICODE -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_NEEDS_QMAIN -I..\Sf -I"..\..\Qt\5.3\mingw482_32\include" -I"..\..\Qt\5.3\mingw482_32\include\QtWidgets" -I"..\..\Qt\5.3\mingw482_32\include\QtGui" -I"..\..\Qt\5.3\mingw482_32\include\QtCore" -I"release" -I"." -I"." -I"..\..\Qt\5.3\mingw482_32\mkspecs\win32-g++" -o release\sfwin.o ..\Sf\sfwin.cpp
    E:\Qt\5.3\mingw482_32\bin\moc.exe -DUNICODE -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_NEEDS_QMAIN -D__GNUC__ -DWIN32 -IE:/Qt/5.3/mingw482_32/mkspecs/win32-g++ -IE:/Qtwp/Sf -IE:/Qt/5.3/mingw482_32/include -IE:/Qt/5.3/mingw482_32/include/QtWidgets -IE:/Qt/5.3/mingw482_32/include/QtGui -IE:/Qt/5.3/mingw482_32/include/QtCore -I. ..\Sf\sfwin.h -o release\moc_sfwin.cpp
    g++ -c -pipe -fno-keep-inline-dllexport -O2 -frtti -Wall -Wextra -fexceptions -mthreads -DUNICODE -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_NEEDS_QMAIN -I..\Sf -I"..\..\Qt\5.3\mingw482_32\include" -I"..\..\Qt\5.3\mingw482_32\include\QtWidgets" -I"..\..\Qt\5.3\mingw482_32\include\QtGui" -I"..\..\Qt\5.3\mingw482_32\include\QtCore" -I"release" -I"." -I"." -I"..\..\Qt\5.3\mingw482_32\mkspecs\win32-g++" -o release\moc_sfwin.o release\moc_sfwin.cpp
    g++ -Wl,-s -Wl,-subsystem,windows -mthreads -o release\Sf.exe release/main.o release/sfwin.o release/moc_sfwin.o -lglu32 -lopengl32 -lgdi32 -luser32 -lmingw32 -LE:/Qt/5.3/mingw482_32/lib -lqtmain -LC:\mingw482\mingw32\lib -LC:\Utils\icu32_52_1_mingw482\lib -LC:\utils\postgresql\pgsql\lib -LC:\utils\mysql\mysql\lib -LC:\opensll\lib -LE:\Qt\5.3\mingw482_32/lib -lQt5Widgets -lQt5Gui -lQt5Core
    mingw32-make[1]: Leaving directory 'E:/Qtwp/build-Sf-Desktop-Release'
    10:11:41: The process "E:\Qt\Tools\mingw482_32\bin\mingw32-make.exe" exited normally.
    10:11:41: Elapsed time: 00:03.

    Eclipse-MinGW Build Output - warum hat SfWin.o Probleme???

    09:17:58 **** Rebuild of configuration Release for project Sf ****
    Info: Internal Builder is used for build
    g++ "-IE:\\Qt\\5.3\\mingw482_32\\include" "-IE:\\Qt\\5.3\\mingw482_32\\include\\QtWidgets" -O3 -Wall -c -fmessage-length=0 -o "src\\SfWin.o" "..\\src\\SfWin.cpp"
    g++ "-IE:\\Qt\\5.3\\mingw482_32\\include" "-IE:\\Qt\\5.3\\mingw482_32\\include\\QtWidgets" -O3 -Wall -c -fmessage-length=0 -o "src\\Sf.o" "..\\src\\Sf.cpp"
    g++ -o Sf.exe "src\\SfWin.o" "src\\Sf.o"
    src\SfWin.o:SfWin.cpp:(.text+0x1): undefined reference to \_imp\_\_\_ZN7QWidgetD2Ev' src\\SfWin.o:SfWin.cpp:(.text+0x7): undefined reference tovtable for SfWin'
    src\SfWin.o:SfWin.cpp:(.text+0xe): undefined reference to vtable for SfWin' src\\SfWin.o:SfWin.cpp:(.text+0x38): undefined reference tovtable for SfWin'
    src\SfWin.o:SfWin.cpp:(.text+0x3f): undefined reference to vtable for SfWin' src\\SfWin.o:SfWin.cpp:(.text+0x45): undefined reference to_imp___ZN7QWidgetD2Ev'
    src\SfWin.o:SfWin.cpp:(.text+0x99): undefined reference to \_imp\_\_\_ZN7QWidgetC2EPS_6QFlagsIN2Qt10WindowTypeEE' src\\SfWin.o:SfWin.cpp:(.text+0x9f): undefined reference tovtable for SfWin'
    src\SfWin.o:SfWin.cpp:(.text+0xa6): undefined reference to vtable for SfWin' e:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: src\\SfWin.o: bad reloc address 0x4 in section.text.startup'
    collect2.exe: error: ld returned 1 exit status

    09:18:00 Build Finished (took 2s.82ms)

    Sf.cpp

    #include "sfwin.h"
    #include <QApplication>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        SfWin w;
    
        w.showMe();
    
        return a.exec();
    }
    

    SfWin.h

    #ifndef SFWIN_H
    #define SFWIN_H
    
    #include <QWidget>
    
    class SfWin : public QWidget
    {
        Q_OBJECT
    
    public:
        explicit SfWin(QWidget *parent = 0);
        ~SfWin();
    
        void showMe();
    
    private:
    
    };
    
    #endif // SFWIN_H
    

    SfWin.cpp

    #include "sfwin.h"
    #include "ui_sfwin.h"
    #include <iostream>
    
    SfWin::SfWin(QWidget *parent) :
        QWidget(parent)
    {
    }
    
    SfWin::~SfWin()
    {
    }
    
    void SfWin::showMe() {
        cout << "in SfWin.showMe()" << endl;
    }
    


  • Du brauchst eine qmake, aber warum quälst du dich heute noch mit Eclipse, der QTCreator nimmt dir die Arbeit ab und ist Open Source.



  • Das eigentliche Problem ist, dass er moc nicht aufruft und dann die moc_*.cpp Dateien nicht kompiliert und diese dann nicht mit linkt.



  • DrakoXP schrieb:

    Das eigentliche Problem ist, dass er moc nicht aufruft und dann die moc_*.cpp Dateien nicht kompiliert und diese dann nicht mit linkt.

    was ja letztlich von qmake mit erledigt wird.



  • aber warum quälst du dich heute noch mit Eclipse,..?

    warum quält sich Reinhold Messner in den Bergen?

    Okay, ich werde die moc_. Dateien reinbringen und sehen was zunächst brennt.



  • Eclipse ist eh die beste C++ IDE, die es atm gibt.



  • Kellerautomat schrieb:

    Eclipse ist eh die beste C++ IDE, die es atm gibt.

    In meiner [Java] Vorlesung: "Am Anfang dürfen sie nicht Eclipse verwenden" - Alle klatschen.



  • couldnt care less



  • In Eclipse Luna 4.4.0 möchte ich ein executable C++ project haben aber die Fahigkeit haben die 'makefile' Datei editieren zu dürfen.

    Wie es geht :

    Schritt 1. mach ein Executable Project aber lass die generierte makefile Datei sichtbar sein.

    man erzeugt ein Executable C++ Project : 'OldProject'
    File/new/C++ Project
    Project name = 'OldProject'
    Project type : Executable/Hello World C++ Project
    Toolchain : MinGW GCC
    next
    next
    Advanced Settings.../'C/C++ Build'/Tool Chain Editor :
    Current Builder = Gnu Make Builder !!! nicht internal, sonst wird makefile versteckt !!!!
    Ok
    Finish

    Build dieses OldProject und makefile, *.mk Dateien erscheinen

    Schritt 2. mach ein Makefile Project und klaue das makefile und ganze Struktur von oben

    in einem Makefile Project genannt 'MyProject',
    File/new/C++ Project
    project name = 'MyProject'
    project type : Makefile project/Hello World C++ Makefile Project
    Toolchain : MinGW GCC
    next
    next
    Advanced Settings.../'C/C++ Build'
    Generate Makefiles automatically : nicht selectiert !!! wir machen unser eigenes
    Use default build command : nicht selectiert !!!
    Build command = mingw32-make
    Ok
    Finish

    Hier gibt's eine Error Meldung weil Makefile ! trotzdem ! generiert wurde

    MyProject.cpp sieht aus wie ein main() mit in C geschrieben aber keine Sorge,
    dieses trotzdem generierte Makefile Datei benutzt 'g++'

    Baue src und Default Folders wie in OldProject und kopiere makefile und *.mk von
    OldProject zu MyProject. MyProject.cpp --> src Folder.

    context menu/Eigenschaften/'C/C++ Build'/Build directory = ${workspace_loc:/bb/Default}
    !!! makefile liegt in MyProject/Default, nicht in MyProject

    in kopierter makefile und *.mk Dateien, ändere 'OldProject' zu 'MyProject'

    Und jetzt hat man ein project wie ein Executable Project aber man darf !! makefile editieren



  • qmake generiert make files
    man kann also die erste Generierung von hand anstoßen,
    ein eclipse Projekt mit eigenen makefiles anlegen
    und alles funktioniert
    man kann auch qmake als exterens tool anlegen, dann geht qmake auch auf Knopfdruck


Anmelden zum Antworten