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?
10
A
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)
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