Seite 1 von 1

Ärger mit Eclipse + moc

Verfasst: 15. April 2007 19:22
von m@rph
Guten Abend.
Ich bin neu hier.

Ich versuche gerade,
  • - Qt 4.2.3 in
    - Eclipse 3.2 mit Calisto 3.1.2,
    - MinGw 3.8.1 und
    - msys 1.0 unter
    - WinXP
zu integrieren.

Beim Kompilieren eines einfachen Hallo-Welt-Programms geht alles gut. Dazu lege ich in Eclipse drei make-Targets an:
  • - gmake -project für das Project-File
    - gmake für das Make-File
    - mingw32-make für die Binaries.
Sobald ich von einer Klasse des Qt-Frameworks ableiten möchte, erhalte ich einen Linkerfehler:

Code: Alles auswählen

mingw32-make: *** [debug] Error 2
  • Ja, ich habe meine Kindklasse public von der Qt-Vaterklasse vererbt und
    ja, ich habe das Makro Q_OBJECT in meiner Kindklasse und
    ja, alle Pfade zu obigen Tools sowie die Variablen QTDIR und MAKESPEC sind gesetzt.
Die Ursache liegt in folgender Zeile des Konsolenoutputs:

Code: Alles auswählen

/usr/bin/sh: c:Qt4.2.3binmoc.exe: command not found
Allem Anschein nach wir korrekt erkannt, daß eine Klasse mit Slots vorhanden ist; der Meta-Object-Compiler wird aufgerufen. Der Aufruf der moc.exe schlägt jedoch fehl, da im Makefile.Debug die Backslashes im Pfad escaped werden. Ersetze ich im Makefile.Debug die einfachen Backslashes von Hand durch doppelte, so läuft der Build-Vorgang ohne Fehler durch. Allerdings landen die Object-Files im Projekt-Verzeichnis und nicht im untergeordneten Debug-Verzeichnis.

Dieser Workaround ist für mich alles andere als zufriedenstellend. Ich möchte Eclipse dazu bringen, ohne manuelles Anpassen irgendwelcher im Hintergrund entstehender Files korrekt zu builden.

1. Frage:
Hat hier jemand einen Tip für mich?
Ist mein Weg zwischendurch irgendwo fehlerhaft?
Muß ich ggf. in Eclipse im Project oder sonstwo noch zusätzliche Variablen oder Optionen zum Build-Vorgang hinzufügen?
Oder ist das ein bekannter Bug?

Desweiteren habe ich mal probiert, mit einem 4. make-Target mit M$ nmake aus dem Platform SDK zu builden. Das funktionierte fehlerfrei. Obwohl ich es etwas pervers finde, Qt unter Eclipse mit einem M$-Builder zu kompilieren ... Dazu eine

2. Frage:
Um Qt mit M$ Visual Studio zu kompilieren, dafür gibt es doch ein käufliches Plugin oder etwas ähnliches. Verletze ich jetzt schon irgendwelche Lizenzen, wenn ich nmake verwende?

Vielen Dank im Voraus.

Verfasst: 15. April 2007 19:52
von Christian81
cygwin/msys sh.exe im Pfad

Und den Fehler den Du uns zeigst ist erstens kein Linkerfehler und zweitens nicht der erste Fehler der aufgetreten ist würde ich mal sagen :)

Verfasst: 15. April 2007 20:10
von m@rph
Christian81 hat geschrieben:cygwin/msys sh.exe im Pfad
Die Path-Variable enthält bereits den Pfad zur sh.exe.
Und den Fehler den Du uns zeigst ist erstens kein Linkerfehler
Aha.
und zweitens nicht der erste Fehler der aufgetreten ist würde ich mal sagen :)
qmake -project und qmake laufen durch. Danach liefert der Konsolen-Output folgendes:

Code: Alles auswählen

mingw32-make 
mingw32-make -f Makefile.Debug
mingw32-make[1]: Entering directory `F:/qt/QtEdit'
g++ -c -g -g -frtti -fexceptions -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"C:/Qt/4.2.3/include/QtCore" -I"C:/Qt/4.2.3/include/QtCore" -I"C:/Qt/4.2.3/include/QtGui" -I"C:/Qt/4.2.3/include/QtGui" -I"C:/Qt/4.2.3/include" -I"." -I"C:/Qt/4.2.3/include/ActiveQt" -I"debug" -I"." -I"c:\Qt\4.2.3\mkspecs\win32-g++" -o debug\main.o main.cpp
g++ -c -g -g -frtti -fexceptions -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"C:/Qt/4.2.3/include/QtCore" -I"C:/Qt/4.2.3/include/QtCore" -I"C:/Qt/4.2.3/include/QtGui" -I"C:/Qt/4.2.3/include/QtGui" -I"C:/Qt/4.2.3/include" -I"." -I"C:/Qt/4.2.3/include/ActiveQt" -I"debug" -I"." -I"c:\Qt\4.2.3\mkspecs\win32-g++" -o debug\QtEMainWindow.o QtEMainWindow.cpp
c:\Qt\4.2.3\bin\moc.exe -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"C:/Qt/4.2.3/include/QtCore" -I"C:/Qt/4.2.3/include/QtCore" -I"C:/Qt/4.2.3/include/QtGui" -I"C:/Qt/4.2.3/include/QtGui" -I"C:/Qt/4.2.3/include" -I"." -I"C:/Qt/4.2.3/include/ActiveQt" -I"debug" -I"." -I"c:\Qt\4.2.3\mkspecs\win32-g++" -D__GNUC__ -DWIN32 QtEMainWindow.h -o debug\moc_QtEMainWindow.cpp
/usr/bin/sh: c:Qt4.2.3binmoc.exe: command not found
mingw32-make[1]: *** [debug\moc_QtEMainWindow.cpp] Error 127
mingw32-make[1]: Leaving directory `F:/qt/QtEdit'
mingw32-make: *** [debug] Error 2
Der erste Fehler scheint der zu sein, den ich genannt habe.

Verfasst: 15. April 2007 20:13
von Christian81
m@rph hat geschrieben:
Christian81 hat geschrieben:cygwin/msys sh.exe im Pfad
Die Path-Variable enthält bereits den Pfad zur sh.exe.
Sag ich doch - das darf nicht sein (gibts übrigens schon zig Threads drüber)

Verfasst: 15. April 2007 20:25
von m@rph
Sag ich doch - das darf nicht sein
Ach so :!: Kaum macht man's richtig, so geht's auch schon ...
(gibts übrigens schon zig Threads drüber)
Sorry, hab nach dem falschen gefahndet.

Vielen Dank.

Verfasst: 15. April 2007 20:29
von Christian81
m@rph hat geschrieben: Sorry, hab nach dem falschen gefahndet.
Ja, das ist immer das Problem :)

Verfasst: 23. April 2007 15:28
von jogi
Hi
Ich habe ein ähnliches Problem. Ich erhalte zB auch die fehlermeldung:"/usr/bin/sh: c:Qt4.2.3binmoc.exe: command not found ".
Auserdem habe ich cygwin auf meinem Rechner instlliert, daher ist sicherlich die Pfadsache bei mir falsch. Wenn ich allerdings in der Konsole PATH eingebe kann ich nichts mit cygwin, mySys oder so erkennen. (PATH=C:\Perl\bin;C:\Programme\WinAVR\bin;C:\Programme\WinAVR\utils\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\Programme\MATLAB704\bin\win32;C:\Programme\Gemeinsame Dateien\Adobe\AGL;C:\Programme\QuickTime\QTSystem\;C:\Qt\4.2.3\bin\;C:\Programme\SSH Communications Security\SSH Secure Shell)
Wo kann ich den Pfad zur sh.exe rausschmeisen.
Greez, Jogi