[qt] ld.exe: cannot find -lQtGuid
-
Hallo,
Ich habe mir die Qt SDK mit Qt Creator etc. heruntergeladen und installiert.
Also verwende ich:
`Qt: 4.6.2
MingGW: 4.4.0
`
Ich möchte Qt statisch linken.
(Debug: Dynamisch / Release: Statisch)Ich habe diese Anleitung verwendet:
http://wiki.qtcentre.org/index.php?title=Building_static_Qt_on_WindowsBeim ausführen von
configure -static -release -no-exceptions
odermingw32-make sub-src
gab es auch keine ersichtlichen Fehler.Beim Debuggen miener Anwedung (unveränderte Qt-GUI-Anwendung) entsteht folgender Kompilierfehler:
:-1: error: collect2: ld returned 1 exit status
Release wird anstandslos kompiliert.
Das gesamte Kompilierprotokoll:
Führe Build-Schritte für Projekt gui aus... Konfiguration unverändert, überspringe QMake-Schritt. Starte: C:/Qt/2010.02/mingw/bin/mingw32-make.exe -w mingw32-make: Entering directory `C:/Dokumente und Einstellungen/Administrator/Eigene Dateien/gui' C:/Qt/2010.02/mingw/bin/mingw32-make -f Makefile.Debug mingw32-make[1]: Entering directory `C:/Dokumente und Einstellungen/Administrator/Eigene Dateien/gui' g++ -static -static-libgcc -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -Wl,-subsystem,windows -o debug\gui.exe debug/main.o debug/mainwindow.o debug/moc_mainwindow.o -L"c:\Qt\2010.02\qt\lib" -lmingw32 -lqtmaind -lQtGuid -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lwinspool -lmsimg32 -lQtCored -lkernel32 -luser32 -lshell32 -luuid -lole32 -ladvapi32 -lws2_32 mingw32-make[1]: Leaving directory `C:/Dokumente und Einstellungen/Administrator/Eigene Dateien/gui' mingw32-make: Leaving directory `C:/Dokumente und Einstellungen/Administrator/Eigene Dateien/gui' c:/qt/2010.02/mingw/bin/../lib/gcc/mingw32/4.4.0/../../../../mingw32/bin/ld.exe: cannot find -lQtGuid collect2: ld returned 1 exit status mingw32-make[1]: *** [debug\gui.exe] Error 1 mingw32-make: *** [debug] Error 2 Beendet mit Rückgabewert 2. Fehler beim Erstellen des Projekts gui Beim Ausführen des Build-Schritts 'Make'
ich denke das wichtigste ist: cannot find -lQtGuid
Beim googlen bin ich auch nur auf unbeantwortete oder nicht gelöste Fälle mit diesem Problem gestoßen.
was könnte ich tun, um den Fehler zu beheben ?
vielen Dank schonmal
Fabian
-
Tjo, wenn die debug-QtLibs static erstellt sind, kannst du deine Application nicht dynamisch linken! Stelle das im .pro um dann sollte es klappen.
-
Ich hatte das Problem vor kurzen auch: Du erstellst die Qt-Libs nur in der Release-Version statisch (mit dem von dir angegebenen Befehl). Als Lösung habe ich einmal versucht, mir eine zweite Qt-Installation zu erstellen, bei der ich den Quellcode dynamisch in der Debug-Version kompiliere und als zweiten Weg - meiner Meinung nach am einfachsten - das Qt-SDK heruntergeladen, sodass ich während des Programmierens alle nötigen Materialien zum Debuggen habe und erst ganz am Ende die statische Release-Version erstelle.
Übrigens wurde (wenn ich mich richtig erinnere) beim Neukompilieren des Qt-Quellcodes als Debug-Version alles zuvor kompilierte gelöscht. Ich habe nicht herausgefunden, wie man Release und Debug gut unter einen Hut bekommt (sprich: mit einem einzigen Kompilier-Vorgang derselben Qt-Installation erstellen kann).
-
Danke für die Antworten.
das Qt-SDK heruntergeladen, sodass ich während des Programmierens alle nötigen Materialien zum Debuggen habe und erst ganz am Ende die statische Release-Version erstelle.
so habe ichs ja gemacht.
das Qt SDK for Windows herunter geladen und installiert. Danach habe ich versucht das Release statisch zu linken.Heißt das jetzt ich kann nur statisch linken oder dynamisch linken.
Somit müsste ich das ausführen:
configure -static -debug-and-release -no-exceptionsÜbrigens wurde (wenn ich mich richtig erinnere) beim Neukompilieren des Qt-Quellcodes als Debug-Version alles zuvor kompilierte gelöscht. Ich habe nicht herausgefunden, wie man Release und Debug gut unter einen Hut bekommt (sprich: mit einem einzigen Kompilier-Vorgang derselben Qt-Installation erstellen kann).
Oder ich muss 2 qt-Versionen installieren?
Wie sag ich dann dem Qt-Creator "Verwende für Debug Qt1 und für Release Qt2"
Aber irgentwie keine runde Lösung...
-
Ich empfehle 2 Versionen.
Du kannst mit dem Qt SDK nicht statisch linken, das geht nur, wenn du dir den Quellcode herunterlädst und ihn entsprechend kompilierst.
Wenn du beide Versionen richtig installiert hast, dann solltest du auch zwei verschiedene Qt Creator finden - allerdings kannst du in den Optionen irgendwo auch einstellen, wo sich die zu nutzende Qt-Version befindet. Ich habe den Ort leider nicht im Kopf, aber es sollte nicht schwer zu finden sein.
-
While(true){} schrieb:
Wie sag ich dann dem Qt-Creator "Verwende für Debug Qt1 und für Release Qt2"
in den Projektoptionen. Du musst aber jede Qt-Installation im Qt Creator auch eintragen
Zwei getrennte Installationen, vor allem wenn man die release-Version static haben will, ist garnicht so unüblich. Ich würde das aber über einen Shadow Build regeln.
Das Verzeichnis mit dem Sourcecode wird dabei nicht verändert.So in etwa:
$QTDDIR = ein leeres Verzeichnis für die Debug-Installation $QTRDIR = ein leeres Verzeichnis für die Release-Installation $QTDIR = der Qt-Sourcecode $QTDDIR > $QTDIR\configure.exe -debug -.... $QTDDIR > .\bin\qmake -o $QTDDIR\Makefile $QTDIR\projects.pro $QTDDIR > mingw32-make // das selbe mit dem release-vereichnis ebenfalls
Vielleicht sollte ich dazusagen, dass dafür Perl benötigt wird
-
Du kannst mit dem Qt SDK nicht statisch linken, das geht nur, wenn du dir den Quellcode herunterlädst und ihn entsprechend kompilierst.
ich hab mir qt-sdk-win-opensource-2010.02.exe herunter geladen
Bevor ich jetzt kompilizierte Konstelationen mache:
Stiefel2000, wie hast du das denn genau gemacht?
-
Ich finde den Ansatz von zwutz ja ganz schön, lässt sich aber vermutlich auch ohne Perl lösen.
Aber hier mal meine Vorgehensweise:
-Qt runterladen (zum Selbstkompilieren darf es nur das Framework sein)
-das Framework installieren
-den Quellcode kompilieren-zusätzlich noch das Qt-SDK runterladen und installieren ODER das Framework erneut installieren (die alte Installation sollte erhalten bleiben) und eine andere Version kompilieren
An diesem Punkt hast du also alle Installationen, die du brauchst - jetzt musst du im QtCreator noch einstellen, dass du mehr als eine Qt-Installation hast und dann darauf achten, dass eine beim Release-Build, die andere beim Debug-Build verwendet wird.
Ich habe bei mir folgendes Script laufen lassen, um den Quellcode entsprechend zu kompilieren. Das müsste entsprechend angepasst, in eine .bat-Datei eingefügt und am richtigen Ort gestartet werden.
@echo off set PATH=D:\MinGW\bin <-hier den MinGW-Pfad eintragen set PATH=%PATH%;%SystemRoot%\System32 if not "%1"=="compile_whole" goto END <-beim Start des Skriptes muss compile_whole als Parameter übergeben werden; so passiert nichts bei versehentlichem Doppelklick o.ä. echo This will configure and compile qt-debug- and release-version. pause cd 4.6.1_Debug <-hier wird in mein Qt-Debug-Verzeichnis gewechselt configure -debug -nomake examples -nomake demos -no-qt3support -no-openssl -plugin-sql-sqlite -plugin-sql-odbc -qt-libpng -qt-libjpeg -platform win32-g++ cd .. cd 4.6.1 <-hier wird in mein Qt-Release-Verzeichnis gewechselt configure -static -release -nomake examples -nomake demos -no-exceptions -no-qt3support -no-openssl -plugin-sql-sqlite -plugin-sql-odbc -qt-libpng -qt-libjpeg -platform win32-g++ cd .. cd 4.6.1_Debug mingw32-make echo Debug-Version fertig. cd .. cd 4.6.1 mingw32-make echo Release-Version fertig cd .. :END
Die Verzeichnisstruktur sah bei mir etwa so aus:
D:\MinGW\bin
D:\Qt\4.6.1_Debug\
D:\Qt\4.6.1\
D:\Qt\script.batIch hoffe, das waren hilfreiche Infos. Die vielen Flags beim Kompilieren könntest du übrigens großteils weglassen, das ist die für mich angepasste Version (spart einiges an Zeit beim Kompilieren).
-
Danke nochmal für die Hilfe.
jetzt hab ich qt einmal komplett statisch und einmal dynamisch.
aber jetzt werden beim statischen, wenn ich ein Menü oder Toolbar habe die Icons nicht mehr geladen und das Menu bleibt ohne Icons (bzw. leere Icons).
Irgentwie ist es hoffnungslos
-
Vor dem Problem stehe ich auch gerade. Einfach die Icons zum Programm kopieren (so dass der in Code angegebene relative Pfad stimmt, wenn das Programm selbst läuft), dann sollten die Icons wieder da sein. Wie man sie nun fest ins Programm bekommt, wüsste ich aber auch gern.