37

我的 Haskell 项目在执行代码时花费大量时间Linking dist/build/myapp/myapp ...并加载共享库。TemplateHaskell

我怀疑这是因为ld速度慢。

如何通过切换到gold链接器来改善链接时间?

4

1 回答 1

46

链接速度快 3 倍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 文件中,以免降低包的可移植性。)cabalSetup.hs

对我来说它3.5x更快,将项目的总链接时间从 150 秒减少到 40 秒。


更新:链接速度快 10 倍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
于 2017-04-05T23:38:12.753 回答