Christian Seiler: stand-alone .exe/static binary mit C++

Beitrag lesen

Hallo,

seit längerem versuche ich eine C++ Anwendung, die mit mingw erstellt wurde OS-kompatibel auch als stand-alone mit allen Abhängigkeiten inkl. bereitzustellen.
Die einzigen Bibliotheken, die verwendet werden, sind: QtCore4 und unter Windows die mingwm10.dll.
Könnt Ihr mir verraten, wie ich erstmal für Windows-Nutzer eine .exe erstellen kann, die alles mit drin hat und wirklich "stand-alone" ist?

Wenn Du unter Windows ein Programm gegen eine Bibliothek linkst, dann linkst Du das Programm eigentlich nicht gegen die "*.DLL"-Datei, sondern gegen eine zugehörige "*.LIB"-Datei - die "*.DLL"-Datei ist nur für die Laufzeit da - zur Compilezeit musst Du die "*.DLL" gar nicht haben.

Jetzt gibt es zwei Arten von "*.LIB"-Dateien unter Windows:

1. Referenzen auf DLLs, die für dynamisches Linken verantwortlich sind.
 2. Statische Libraries, die den kompilierten Code der Bibliothek selbst
    enthalten.

Ich habe mit mingw/Qt unter Windows bisher nur versucht, dynamisch gelinkte Executables zu erstellen und habe daher keine Erfahrung mit dem statischen Linken. Allerdings: Es kann gut sein, dass mingw statische Libs in Form von "*.LIB" nicht kennt sondern wie unter Linux auch "*.a"-Dateien verwendet.

Was Du auf jeden Fall versuchen kannst ist einfach "-static" zum GCC-Befehl hinzuzufügen, um statisches Linken zu erzwingen. Beispiel:

Dynamisch: gcc -Wall -o Programm.exe Programm.c -lQtCore

Statisch: gcc -Wall -static -o Programm.exe Programm.c -lQtCore

Das setzt natürlich voraus, dass die statischen Libs für alles, was Du brauchst, vorhanden sind. Bei der mingw-Runtime kann ich mir das gut vorstellen, bei Qt kann es sein, dass Du das nochmal kompilieren musst (Sourcen sind ja verfügbar) mit der Option, statische Libs zu erzeugen.

Viele Grüße,
Christian

--
Mein "Weblog" [RSS]
Using XSLT to create JSON output (Saxon-B 9.0 for Java)
»I don't believe you can call yourself a web developer until you've built an app that uses hyperlinks for deletion and have all your data deleted by a search bot.«
            -- Kommentar bei TDWTF