10
私はstack
を使ってプロジェクトをビルドし、生成された実行ファイルが単純なプログラムであってもかなり大きい(10M)ことを確認しています。実行可能なサイズを減らすために、どうすればstack
を共有ライブラリを構築し、共有ライブラリに動的にリンクする実行ファイルを生成することができますか?スタックに動的リンクを使用させるにはどうすればよいですか?
私はstack
を使ってプロジェクトをビルドし、生成された実行ファイルが単純なプログラムであってもかなり大きい(10M)ことを確認しています。実行可能なサイズを減らすために、どうすればstack
を共有ライブラリを構築し、共有ライブラリに動的にリンクする実行ファイルを生成することができますか?スタックに動的リンクを使用させるにはどうすればよいですか?
.cabalファイルに '-dynamic'をghc-options
に追加します。
例えば、stack new simple-example simple
によって生成されたプロジェクトでは、simple
の実行可能ファイルは1.0Mで、その後に-121.に '-dynamic'を追加しました。変更後は12Kに減少しました。ここで
はsimple-example.cabal
の関連部分です:
executable simple-example
hs-source-dirs: src
main-is: Main.hs
default-language: Haskell2010
build-depends: base >= 4.7 && < 5
ghc-options: -dynamic
は、(オプションが必要ありません)stack build
でビルドします。
動的にリンクされているライブラリを表示するには、ldd
ツール(またはMacではotool -L
)を使用できます。
$ 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)
あなたは 'スタックbuild'にhttps://ghc.haskell.org/trac/ghc/wiki/SharedLibraries/PlatformSupportを見て、' -ghc-options'パラメータを取りたいかもしれません – Alec