Kompiliere eigenständige Version mit Cygwin

8

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

  1. Statisch verknüpfen Sie cygwin1.dll
    Wenn ich cygwin1.dll statisch verbinden kann, dann kann ich eine Standalone-Exe bekommen.

  2. Verbinden Sie cygwin1.dll mit myprog.exe
    Wenn ich cygwin1.dll mit meinem Programm zusammenführen kann, kann ich eine Standalone-Exe bekommen.

Schlage nicht vor, dass ich IlMerge verwende. Dies wird nicht funktionieren, da ich mein Programm nicht mit .NET kompiliert habe.

Ist eine dieser Optionen möglich? Wenn nicht, ist mit diesem Dilemma etwas möglich? Danke!

    
Leo Izen 03.09.2010, 22:57
quelle

3 Antworten

3

Ich kann zwei Möglichkeiten sehen, die Sie für vernünftig halten. Eine wäre, eine Stub-ausführbare Datei mit einem anderen Compiler zu erstellen (z. B. MinGW - was auch immer, nur um cygwin nicht zu benötigen), um die Haupt-ausführbare Datei und cygwin.dll in ein temporäres Verzeichnis zu entpacken und dann diese ausführbare Datei zu erzeugen. Um nur eine einzelne ausführbare Datei zu verteilen, sollten Sie die Haupt-ausführbare Datei und cygwin.dll als binäre Ressourcen zum "Stub" hinzufügen. Es ist ein bisschen hässlich, aber ziemlich einfach.

Die Alternative wäre, die Quelle zu cygwin zu holen und baue es als statische Bibliothek auf. Zumindest in der Theorie sollte das sauberer sein - aber es ist zweifellos auch mehr Arbeit. Es wird mit ziemlicher Sicherheit etwas Arbeit bringen, es als reinen statischen Code anstelle einer DLL zu erstellen, obwohl man sich kaum vorstellen kann, wie viel. Wenn man nur ein bisschen surft, ist es ziemlich unwahrscheinlich, dass es ein schneller Job von ein paar Stunden oder so etwas sein wird (es sei denn, es gibt etwas, das ich vermisse, das unterstützt natürlich das statische Erstellen).

    
Jerry Coffin 03.09.2010, 23:21
quelle
3

Übergeben Sie -mno-cygwin als Compiler- und Linker-Flag. Wenn die Anforderungen Ihres Programms einfach genug sind, vermeiden Sie abhängig von Cygwin-Bibliotheken und erstellen Sie eine eigenständige EXE.

    
Edmund 04.09.2010 00:00
quelle
1

Genauere Antwort von Jerry.

Das unten beschriebene Verfahren sollte mit Ihrem Recht und Lizenzrecht konfrontiert werden! Ich weiß, dass es funktionieren kann, aber die Rechte, das Ergebnis zu verteilen (oder sogar das Verfahren durchzuführen), können (und ich fühle mich wirklich so) durch eine Cygwin-Lizenz begrenzt sein. Das liegt daran, dass sich Ihre Anwendung immer noch auf Cygwin bezieht (obwohl es nutzlos ist - aber immer noch in Ihrer App ist)

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

kompiliert wurde

Wechseln Sie in der Cygwin-Konsole zu C:\xxx\yyy\zzz und geben Sie

ein %Vor%

Sie erhalten alle DLLs, die Ihre Anwendung verwendet. Kopieren Sie dann C:\xxx\yyy\zzz in alle DLLs, die für cygwin aufgelistet und spezifisch sind.

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

Vielleicht müssen Sie Ihr Projekt mit der Option% -L C:\xxx\yyy\zzz neu kompilieren. Beobachte alle anderen Pfade in deinen Quellen.

Dadurch wird Ihre Anwendung unabhängig von der Cygwin-Installation und Sie können ihre Funktionalität anderen Benutzern von Windows ohne Cygwin zur Verfügung stellen. Aber - noch einmal, ich weise darauf hin und frage dich - sei dir der richtigen Lizenz und dem Gesetz der Cygwin-Schöpfer bewusst und beobachte sie!

    
dtstgseete 25.12.2010 03:11
quelle

Tags und Links