Tun ghc kompilierte Binärdateien benötigen GHC oder sind Sie eigenständig?
Wenn ein Freund will, um mein Haskell-Binärdateien, hat er zum ersten mal installieren, Haskell, oder kann er sofort ausführen des binären selbst?
Ist die Antwort die gleiche, die auf Mac, Windows und Linux?
- Siehe auch diese frühere Antwort auf die dynamische Verknüpfung, stackoverflow.com/questions/6115459/...
- Und auf statische Links, stackoverflow.com/questions/5131182/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
GHC erzeugt stand-alone-Binärdateien, die nicht erfordern GHC selbst installiert werden, aber Sie tun link gegen einige dynamische Bibliotheken, vor allem
libgmp
. Die restlichen Bibliotheken sind Häufig gefunden auf den meisten Linux-Systemen. Ich glaube, die situation ist ähnlich wie unter Windows.Können Sie überprüfen, welche dynamischen Bibliotheken, die Sie von abhängen mit
ldd
auf Linux. Hier ist, was ich auf Ubuntu Natty für ein einfaches Hallo Welt-Programm:ldd
sollte auf dem Mac OS X und Windows, die Sie verwenden können, Dependency Walker, um die gleichen Informationen.ldd
nicht auf OS X, aber Sie könnenotool -L
um ähnliche Informationen.GHC Haskell kompiliert, um Objekt-code, mit einer verknüpften Laufzeit. Das bedeutet, dass Sie nicht brauchen, einen Haskell-compiler installiert, die zum ausführen von Haskell-Programmen.
Die erzeugte ausführbare Datei wird, verwenden Sie eine Variante von static und dynamic linking für C und Haskell-Bibliothek-Abhängigkeiten. Alles, was statisch gelinkten muss nicht installiert werden auf dem Computer des Benutzers. Alles, was dynamisch mit eingebaut werden müssen.
Um zu sehen, was Sie brauchen, um Schiff zusammen mit der ausführbaren Datei, unter Linux (oder Cygwin), verwenden Sie
ldd
. Sie können erzwingen, dass die statische Verbindung der fast alles durch die übergabe-static
zu GHC.Wenn es wünschenswert statisch link einige C Bibliotheken mit Ihren Haskell ausführbare Datei, unter Linux können Sie
--whole-archive
mit dem GNU-linker, zum Beispiel:Während Sie sind Recht Häufig
libffi
undlibz
sind nicht allgegenwärtig (libffi
ist eine, die ich sehe oft in mein Haskell-binaries).Dieser Ansatz wurde zuerst vorgeschlagen, um mich ganz vor kurzem, auf haskell-cafe.
.a
Dateien in GHC libdir. Es ist wichtig, dass alle Bibliotheken haben auch-optl
vor Ihnen, wie in den (nun geänderten) Beispiel oben, sonst GHC ordnet Sie mit Bezug auf die linker-Optionen.Einer installation von GHC ist nicht erforderlich für die meisten binaries. Einige (z.B. xmonad) verwenden Haskell als Ihre Konfiguration Sprache; in diesen Fällen benötigen Sie einen compiler.
Es ist auch eine Frage der statische vs. dynamische Verknüpfung. Ich glaube, der Standard ist momentan noch statische Links, in dem Fall sollte es Recht einfach zu migrieren ein binary von einer Maschine zur anderen (nur brauchen, um die gleiche Architektur und OS).