Hilfe: statisch/dynamisch

Verschiedenes zu Qt
Antworten
graythornWW
Beiträge: 38
Registriert: 20. Oktober 2008 09:48

Hilfe: statisch/dynamisch

Beitrag von graythornWW »

Hallo zusammen,

ich stand vor folgendem Problem:

Ich habe ein Projekt, Eclipse (Helios), MinGW (4.4) und natürlich Qt (4.6.2).
Unter Eclipse kann man ja einfach eine Debug- oder eine Release-Version bauen. Beides ging problemlos und wurde dynamisch gegen qt etc. geklinkt.

So weit, so gut!

Jetzt wollte ich aber die Release-Version statisch gegen die Qt-Bibliotheken (und MinGW-bibliotheken) linken.

Also habe ich QT neu übersetzt und die statischen libraries für debug und release gebaut. War etwas frickelig, aber das habe ich geschafft :-)

Und siehe da: ohne das ich am *.pro file meines Projektes irgend etwas geändert habe, wurde das Projekt statisch gelinkt!

1. Frage: woher weiß das System das, bzw. in welchen Dateien wird das wie geregelt :?:

2. Frage: was muß ich in der *.pro Datei meines Projektes ändern, damit die Debug-Version wieder dynamisch gelinkt wird? (Sie enthält bereits einen Release und einen Debug-Block zur Unterscheidung der beiden Versionen) :?: :?::?:

Danke und Gruß
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag von RHBaum »

Frage: woher weiß das System das, bzw. in welchen Dateien wird das wie geregelt
DU linkst gegen eine ImportLIb (QTCored.a / QTCore.a; QTGUId.a / QTGUI.a ....) , diese zieht entweder die passende dll an, oder im statischen fall, iss alles in der lib drinne und keine dll wird angezogen.
Es wird also bestimmt durch: was für libs angezogen.

Frage: was muß ich in der *.pro Datei meines Projektes ändern, damit die Debug-Version wieder dynamisch gelinkt wird? (Sie enthält bereits einen Release und einen Debug-Block zur Unterscheidung der beiden Versionen)
wo nach den libs mit den entsprechenden Namen im Dateisystem gesucht wird, bestimmt im Falle der QT die Variable QTDIR(miestens, kann man auch komplett umbauen), wo und wie auch immer die definiert wird :-)

Um zwischen statischen und dynamischen linken (und versionen) umschalten zu koennen, brauchst du 2 oder mehr komplette QT installationen auf der platte.

einfach deine statische version unter QT/4.6.1_static und die dynam. unter QT/4.6.1 ablegen, und dann das QTDIR entsprechend umschalten.

Um sowas aber beherschbar zu bekommen, solltest dich intensivst mit deinem make tool (ich denk mal qmake in deinem Fall) und paar compiler, linker Grundlagen auseinandersetzen.
Mit diesem wissen kann man sich dann richtig schicke Builds bauen.

Ich kompilier hier z.b. auch dlls (mit qt abhaengigkeiten) fuer mehrere qt versionen aufs mal ...
IDE's sind leider oftmals nicht in der Lage, komplexere Buildoptionen zu bedienen ... oder mann muss da so frickeln, das nen vernuenftiges buildtool einfach die bessere option ist .
(unter Visual Studio artet z.b. die Verwaltung der Konfigurationen zum horror aus, wenn man mehrere Konfigurationen fuer unterschidliche QT versionen etc pflegen will ).

Ciao ...
Antworten