我的 Haskell 项目在执行代码时花费大量时间Linking dist/build/myapp/myapp ...
并加载共享库。TemplateHaskell
我怀疑这是因为ld
速度慢。
如何通过切换到gold
链接器来改善链接时间?
我的 Haskell 项目在执行代码时花费大量时间Linking dist/build/myapp/myapp ...
并加载共享库。TemplateHaskell
我怀疑这是因为ld
速度慢。
如何通过切换到gold
链接器来改善链接时间?
gold
从 GHC 7.8开始,您可以告诉 GHC 和 cabal(在运行时无需重新编译 GHC)与 GNU gold 链接。
您需要在.cabal
文件中:
library:
ghc-options: -optl-fuse-ld=gold
ld-options: -fuse-ld=gold
executable myExecutable
ghc-options: -optl-fuse-ld=gold
ld-options: -fuse-ld=gold
(请注意,您可能希望在命令行上将这些标志传递给stack
//而不是将它们硬编码到 .cabal 文件中,以免降低包的可移植性。)cabal
Setup.hs
对我来说它3.5x
更快,将项目的总链接时间从 150 秒减少到 40 秒。
lld
有关完整示例,请参见https://github.com/nh2/link-with-lld-example;关键部位:
library
ghc-options: "-pgmP clang" "-pgmc clang" "-pgma clang" "-pgml clang" "-optl-fuse-ld=lld"
ld-options: -fuse-ld=lld
executable myExecutable
ghc-options: "-pgmP clang" "-pgmc clang" "-pgma clang" "-pgml clang"
ld-options: -fuse-ld=lld
最终可执行链接的链接时间比较我的项目:
ld 124 seconds
gold 36 seconds
lld 11 seconds