2016-08-10 58 views
10

stack projelerini oluşturmak ve oluşturulan programların basit programlar için bile oldukça büyük (10M) olduğunu buluyorum. Yürütülebilir boyutu azaltmak için, paylaşılan kitaplıkları oluşturmak ve paylaşılan kitaplıklara dinamik olarak bağlanan yürütülebilir dosyalar oluşturmak için stack nasıl edinebilirim?Dinamik bağlantı kullanmak için nasıl yığın alabilirim?

+0

Sen 'yığın build' için https://ghc.haskell.org/trac/ghc/wiki/SharedLibraries/PlatformSupport bir göz ve' -ghc-options' parametreyi almak isteyebilirsiniz – Alec

cevap

8

.cabal dosyanıza '-dynamic' değerini ghc-options'a ekleyin. Örneğin, stack new simple-example simple tarafından oluşturulan bir projede, simple yürütülebilir dosyası ghc-options'a '-dynamic' eklemeden önce 1.0M olmuştur. Değişiklikten sonra 12K'ya düşürüldü.

İşte simple-example.cabal ilgili bölümü: stack build ile

executable simple-example 
    hs-source-dirs:  src 
    main-is:    Main.hs 
    default-language: Haskell2010 
    build-depends:  base >= 4.7 && < 5 
    ghc-options:   -dynamic 

Oluşturma (hiçbir seçenek gereklidir).

Dinamik olarak bağlantılı olan kitaplıkları göstermek için ldd aracını (veya Mac'te otool -L) kullanabilirsiniz.

$ otool -L .stack-work/install/x86_64-osx/lts-6.10/7.10.3/bin/simple-example 
.stack-work/install/x86_64-osx/lts-6.10/7.10.3/bin/simple-example: 
     @rpath/libHSbase-4.8.2.0-HQfYBxpPvuw8OunzQu6JGM-ghc7.10.3.dylib (compatibility version 0.0.0, current version 0.0.0) 
     @rpath/libHSinteger-gmp-1.0.0.0-2aU3IZNMF9a7mQ0OzsZ0dS-ghc7.10.3.dylib (compatibility version 0.0.0, current version 0.0.0) 
     @rpath/libHSghc-prim-0.4.0.0-8TmvWUcS1U1IKHT0levwg3-ghc7.10.3.dylib (compatibility version 0.0.0, current version 0.0.0) 
     @rpath/libHSrts-ghc7.10.3.dylib (compatibility version 0.0.0, current version 0.0.0) 
     @rpath/libffi.dylib (compatibility version 7.0.0, current version 7.2.0) 
     /usr/lib/libiconv.2.dylib (compatibility version 7.0.0, current version 7.0.0) 
     /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1226.10.1)