如何在Haskell中与GNU gold链接器而不是ld链接

我的Haskell项目花了很多时间在Linking dist / build / myapp / myapp …以及在执行TemplateHaskell代码时加载共享库.

我怀疑这是因为ld很慢.

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

最佳答案
用黄金加快3倍

Since 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 / Setup.hs,而不是在.cabal文件中对它们进行硬编码,以免降低软件包的可移植性.)

对我而言,它的速度提高了3.5倍,将项目的总链接时间从150秒降低到40秒.

更新:使用lld链接速度提高10倍

有关完整示例,请参见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

转载注明原文:如何在Haskell中与GNU gold链接器而不是ld链接 - 代码日志