2017-01-23 40 views
3

我有一個簡單的程序,似乎根本沒有使用libgmp。Haskell GHC創建不依賴GMP的可執行文件?

-- Sample.hs 
main = putStrLn "hi" 

如果我在Linux上使用

的默認選項編譯
$ 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...) 

有一些標誌,我可以傳遞給GHC告訴它不產生取決於libgmp.so庫的可執行文件。我不想靜態鏈接libgmp,理想情況下,我想配置GHC不發出依賴於該庫的代碼。如果我嘗試使用Integer或類似的東西,我可以減少某些功能,如錯誤。

+1

如果你擔心LGPL許可證注意,所有你需要做的符合該是A:不發貨或B的二進制文件(運行Web服務器的如常見的情況):只要出貨目標代碼與二進制文件一起, ;爲了遵守LGPL,您需要做的只是讓人們鏈接LGPL庫的不同兼容版本。 – Cubic

回答

3

我對此一點也不確定,但看起來您可以通過告訴GHC在構建GHC時使用integer-simple而不是integer-gmp來做到這一點。具體來說,配置INTEGER_LIBRARY=integer-simple。請參閱GHC源代碼樹中的mk/config.mk.in

+2

是的,我之前已經完成了它,它工作正常......除了依賴於'integer-gmp'的一些庫。文字是其中之一,直到我補丁(然後有人修補我的補丁)。可悲的是,這樣做的套件似乎是[增長](http://packdeps.haskellers.com/reverse/integer-gmp)。 –

+0

@ThomasMDuBuisson,該列表包含'bytestring',這非常關鍵。如果真的取決於'integer-gmp',那會阻塞很多其他庫。 – dfeuer

+1

它和其他幾個都有一個整型簡單標誌。 –

相關問題