8 Stimmen

Kompilieren einer eigenständigen Exe mit Cygwin

Ich möchte eine eigenständige Exe mit Cygwin erstellen. Ich habe zwei Möglichkeiten:

  1. Cygwin1.dll statisch verknüpfen
    Wenn ich cygwin1.dll statisch verknüpfen kann, dann kann ich eine eigenständige Exe erhalten.

  2. cygwin1.dll mit myprog.exe zusammenführen
    Wenn ich cygwin1.dll in mein Programm einbinden kann, dann kann ich eine eigenständige Exe erhalten.

Schlagen Sie nicht vor, dass ich IlMerge verwende. Dies wird nicht funktionieren, weil ich mein Programm nicht mit .NET kompiliert habe.

Ist eine dieser Optionen möglich? Wenn nicht, gibt es irgendetwas, das bei diesem Dilemma möglich ist? Vielen Dank!

0 Stimmen

Ich nehme an, dass Sie tatsächlich Dienste von CYGWIN.DLL benötigen, und dass die Verwendung von -Mno-cygwin (oder MinGW) für Sie nicht funktioniert?

0 Stimmen

Ich weiß es nicht. Ich benutze GCJ, aber ich konnte den GCJ, der mit mingw kam, nicht zum Laufen bringen.

4voto

Edmund Punkte 10205

Versuchen Sie, die -mno-cygwin als Compiler- und Linker-Flag. Wenn die Anforderungen Ihres Programms einfach genug sind, wird dies die Abhängigkeit von Cygwin-Bibliotheken vermeiden und eine eigenständige EXE erstellen.

3voto

Jerry Coffin Punkte 452852

Ich sehe zwei Möglichkeiten, die Sie für sinnvoll halten könnten. Die eine wäre, eine Stub-Executable mit einem anderen Compiler zu erstellen (z.B. MinGW - was auch immer, nur damit es cygwin nicht braucht), um die Haupt-Executable und cygwin.dll in ein temporäres Verzeichnis zu entpacken, und dann diese Executable zu starten. Um nur eine einzige ausführbare Datei zu verteilen, müssen Sie die Hauptdatei und die cygwin.dll als Binärressourcen in den "Stub" einfügen. Es ist ein bisschen hässlich, aber ziemlich einfach.

Die Alternative wäre, die Quelle für Cygwin und erstellen Sie sie als statische Bibliothek. Zumindest in der Theorie sollte dies sauberer sein - aber es ist auch zweifellos mehr Arbeit. Getting es als rein statischen Code anstelle einer DLL zu bauen wird fast sicher einige Arbeit, obwohl es schwer ist, sogar zu schätzen, wie viel. Nur ein bisschen stöbern, es scheint ziemlich unwahrscheinlich, dass es eine schnelle Arbeit von ein paar Stunden, oder so etwas sein wird (es sei denn, es gibt etwas, das ich übersehen habe, die bereits unterstützt es statisch zu bauen, natürlich).

2voto

dtstgseete Punkte 19

Eine genauere Antwort von Jerry.

Das unten beschriebene Verfahren sollte mit Ihren Rechten und dem Lizenzrecht konfrontiert werden! Ich weiß, dass es funktionieren kann, aber die Rechte zur Verbreitung des Ergebnisses (oder sogar zur Durchführung der Prozedur) können (und ich bin wirklich der Meinung, dass sie es sind) durch die Cygwin-Lizenz eingeschränkt sein. Das liegt daran, dass Ihre Anwendung immer noch auf Cygwin verweisen wird (auch wenn es nutzlos ist - aber immer noch in Ihrer Anwendung ist)

Angenommen, hello.exe ist der Name Ihrer großen Anwendung, die unter Cygwin im großen Projektverzeichnis kompiliert wurde C:\xxx\yyy\zzz\

Gehen Sie in der Cygwin-Konsole zu C:\xxx\yyy\zzz und tippen

objdump -p hello.exe | grep "DLL Name"

Sie erhalten alle DLLs, die Ihre Anwendung verwendet. Dann kopieren Sie C:\xxx\yyy\zzz für alle aufgelisteten DLLs, die spezifisch für Cygwin sind.

Beachten Sie, dass Ihre Anwendung andere Anwendungen aufrufen kann (z.B. mit der exec-Funktion) --- finden Sie die Bibliotheken, die die Anwendungen verwenden und kopieren Sie diese Bibliotheken sowie die Anwendungen selbst -- nach C:\xxx\yyy\zzz .

Möglicherweise müssen Sie Ihr Projekt mit der Option der Art neu kompilieren -L C:\xxx\yyy\zzz oder so. Achten Sie auf alle anderen Pfade in Ihren Quellen.

Dadurch wird Ihre Anwendung unabhängig von der Cygwin-Installation und Sie können ihre Funktionalität ---- anderen Windows-Benutzern ohne Cygwin präsentieren bzw. mit ihnen teilen. Aber - ich weise Sie noch einmal darauf hin und bitte Sie - beachten Sie die Lizenz und das Recht der Cygwin-Hersteller und halten Sie sich daran!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X