2017-01-23 1 views
3

Ich habe ein einfaches Programm, das anscheinend nicht libgmp verwendet.Haskell GHC erstellen ausführbare Datei nicht abhängig von GMP?

-- Sample.hs 
main = putStrLn "hi" 

Wenn ich es mit den Standardoptionen auf Linux kompilieren

$ ghc Sample.hs 

Dies erzeugt eine ausführbare Datei namens Sample. Ich wollte sehen, welche Bibliotheken von einem einfachen Programm benötigt werden, das keine willkürlichen Ganzzahlen verwendet.

$ ldd Sample | sed -e 's/[(].*[)]/(0x000...)/' 
     linux-vdso.so.1 (0x000...) 
     libgmp.so.10 => /usr/lib64/libgmp.so.10 (0x000...) 
     libm.so.6 => /lib64/libm.so.6 (0x000...) 
     librt.so.1 => /lib64/librt.so.1 (0x000...) 
     libdl.so.2 => /lib64/libdl.so.2 (0x000...) 
     libc.so.6 => /lib64/libc.so.6 (0x000...) 
     /lib64/ld-linux-x86-64.so.2 (0x000...) 
     libpthread.so.0 => /lib64/libpthread.so.0 (0x000...) 

Gibt es eine Fahne ich GHC passieren kann, es zu sagen, nicht eine ausführbare Datei in Abhängigkeit von der libgmp.so Bibliothek zu erzeugen. Ich möchte libgmp nicht statisch verknüpfen, im Idealfall möchte ich GHC so konfigurieren, dass kein Code ausgegeben wird, der von dieser Bibliothek abhängt. Ich bin in Ordnung mit einigen reduzierten Funktionen wie einem Fehler, wenn ich versuche, eine Integer oder etwas ähnliches zu verwenden.

+1

Wenn Sie sich Sorgen um die LGPL-Lizenz machen, müssen Sie lediglich Folgendes beachten: A: Ihre Binaries nicht versenden (z. B. häufiger Webserver) oder B: Nur Objektcode zusammen mit Ihren Binärdateien senden ; Alles, was Sie tun müssen, um der LGPL zu entsprechen, ist es, den Benutzern zu erlauben, sich mit einer anderen kompatiblen Version der LGPL-Bibliothek zu verbinden. – Cubic

Antwort

3

Ich bin mir überhaupt nicht sicher, aber es scheint wahrscheinlich, dass Sie es tun können, indem Sie GHC sagen, integer-simple anstelle von integer-gmp zu verwenden, wenn Sie GHC bauen. Konfigurieren Sie speziell INTEGER_LIBRARY=integer-simple. Siehe mk/config.mk.in im GHC-Quellbaum.

+2

Ja, ich habe das schon mal gemacht und es funktioniert gut ... bis auf ein paar Bibliotheken, die auf 'integer-gmp' angewiesen sind. Text war einer von denen, bis ich ihn gepatcht habe (und dann hat jemand meinen Patch repariert). Leider scheint die Menge der Pakete, die dies tun, [wachsend] zu sein (http://packdeps.haskellers.com/reverse/integer-gmp). –

+0

@ThomasMDuBuisson, diese Liste enthält 'bytestring', was ziemlich kritisch ist. Wenn es wirklich auf 'integer-gmp' ankommt, blockiert das eine Menge anderer Bibliotheken. – dfeuer

+1

Es und einige andere haben eine ganzzahlige einfache Flagge. –

Verwandte Themen