2017-01-23 10 views
3

私はlibgmpをまったく使用していない単純なプログラムを持っています。私は、LinuxHaskell GHCはGMPに依存しない実行ファイルを作成しますか?

にデフォルトのオプションを使用して、それをコンパイルした場合

-- Sample.hs 
main = putStrLn "hi" 

$ ghc Sample.hs 

これはSampleと呼ばれる実行可能ファイルを生成します。私は、任意の精度整数を使用しない単純なプログラムによって必要とされたライブラリを見たいと思っていました。

$ 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...) 

私はlibgmp.soライブラリに依存する実行可能ファイルを生成しないことを伝えるためにGHCに渡すことができますいくつかのフラグがあります。私は静的にlibgmpをリンクしたくはありません。理想的には、GHCがそのライブラリに依存するコードを出力しないように設定したいのです。 Integerなどを使用しようとするとエラーなどの機能が低下しても問題ありません。

+1

LGPLのライセンスノートが気になる場合は、それに準拠するために必要なのはA:バイナリを出荷しないことです(Webサーバーを実行する一般的なケースなど)。B:バイナリと共にオブジェクトコードを送ってください; LGPLに準拠するために必要なのは、人々が異なる互換性のあるバージョンのLGPLライブラリにリンクできるようにすることだけです。 – Cubic

答えて

3

GHCをビルドするときに、integer-gmpの代わりにinteger-simpleを使用するようにGHCに指示することができます。具体的には、INTEGER_LIBRARY=integer-simpleを設定します。 GHCソースツリーのmk/config.mk.inを参照してください。

+2

はい、これまでにやったことがありますが、それはうまくいきます。ただし、 'integer-gmp'に依存するライブラリはいくつかあります。テキストは、私がそれをパッチする(そして誰かが私のパッチを修正した)まで、それらの1つでした。残念ながら、これを行っているパッケージのセットは成長しているようです(http://packdeps.haskellers.com/reverse/integer-gmp)。 –

+0

@ThomasMDuBuisson、そのリストには非常に重要な 'bytestring'が含まれています。もしそれが本当に 'integer-gmp'に依存していれば、それは他のライブラリを大量にブロックします。 – dfeuer

+1

それは、整数単純フラグを持っています。 –

関連する問題