我的Haskell项目在Linking dist/build/myapp/myapp ...
中花费了大量时间,并且在执行TemplateHaskell
代码时也加载了共享库。
我怀疑这是因为ld
很慢。
如何通过切换到gold
链接器来改善链接时间?
答案 0 :(得分:44)
gold
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.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