Ein Programm zu entwickeln hat immer zwei Seiten.
Zunächst muss das Programm programmiert und getestet werden. Ist dies getan, muss man das Programm benutzbar machen und verteilen.
Objektiv betrachtet klingt der erste Schritt natürlich nach viel mehr Arbeit als der zweite. Ist er eigentlich auch. Wie gesagt, eigentlich.
Im letzten Post habe ich euch ja über SBNotify berichtet. Das Programm ist jetzt endgültig fertig, es gibt nichts mehr daran auszusetzen – und doch kann ich es nicht releasen.
Warum das? Ganz einfach. Ich scheitere am zweiten Schritt.
Wie das sein kann? Ganz einfach. Ich krieg das Ding einfach zum verrecken nicht kompiliert.
Wie ich es dann testen kann? Ich erzähle es euch.
Für SBNotify wird ja sowohl C++ als auch das QT Framework benötigt. Nun muss man wissen, dass es zwei Möglichkeiten gibt, eine Bibliothek (und QT ist ja nichts anderes) mit einem Programm zu verwenden, man sagt auch “an es zu binden”: dynamisch oder statisch.
Bei der dynamischen Methode wird die Bibliothek in eine extra Datei ausgelagert (unter Windows .dll Dateien), bei der statischen hingegen direkt mit in die .exe gepackt. Die Vor- und Nachteile der beiden Methoden dürften auf der Hand liegen.
Da es sich bei SBNotify nun um ein kleines Programm handelt, was sicherlich auch keine Updates erhalten wird (wozu auch), war mir daran gelegen, eine einzelne .exe Datei auszuliefern (auch aus dem Grund, dass man manchen Leuten nicht mal zumuten kann, eine .dll zu kopieren). Dafür muss ich also QT statisch kompilieren.
DOCH DAS WILL ES UMS VERRECKEN NICHT!
Ich habe verschiedene Version mit verschiedenen Compiler Flags probiert, und ES GEHT NICHT.
Nun dachte ich mir, okay, dann versuchst du es eben auf eine andere Art und baust ein kleines Setup.
Dachte ich mir so, doch auch als ich die Build-Konfiguration von Debug auf Release schaltete startete das Programm nicht mehr!?
WTF, falscher Film?
Das es unter Linux alles funktioniert brauch ich wohl nicht zu erwähnen, aber das bringt im Zweifel sehr wenig.
Ich kann den Windows Usern nicht zumuten, QT zu installieren, weil sie da kein Bock drauf haben, für so ein kleines Programm (die Linux User habens vielfach schon drauf), und die DLLs kann ich auch nicht mitliefern, weil das Programm SOWIESO NICHT STARTET. . .
So long,
kingfinn
// Update:
Ich habe es auf jx Anweisung hin nochmal probiert (also nicht das statische Linken, sondern das dynamische :D), und komischerweise ging es. JX’S WUNDERKUGEL KLÄRT ALLE PROBLEME.