LoginSignup
4
1

More than 3 years have passed since last update.

CMake + C++ プロジェクトで lld(or custom linker) を使うメモ

Last updated at Posted at 2020-05-22

lld: gnu の既存リンカ bfd より, より高速にリンクができたりする. また, いくらかへんてこなリンケージが使われているときでも, いい感じに処理してくれたりする.
(bfd の後続で gold linker もあったが, 現状は lld に統合?)

bfd でうまくリンクできなかったり, bfd でリンクが遅くなってきたら lld 利用を考えてみましょう.
リンクが遅いとは, それなりにいい CPU(e.g. Ryzen9 3950X as of 22th May, 2020) でリンクに 4~5 秒以上かかるようなときです. lld にすると 1 秒くらいに短縮されます.

Ubuntu とかですと apt で別途インストールが必要です.
(コマンドラインで ld.lld という感じで利用できるか確認しておきましょう)

clang/clang++ でリンクする場合, -fuse-ld=lld と指定します.
(gcc も最新だと対応しているはず?)

cmake では,

add_executable したターゲットに, LINK_FLAGS-fuse-ld= でリンカ指定します.

set_property(TARGET ${BUILD_TARGET} APPEND_STRING PROPERTY LINK_FLAGS " -fuse-ld=${MY_LD}")

他の方法

CMAKE_C_LINK_EXECUTABLE でもいけるかも.

ただ, こちらで試して限りでは, うまく linker を呼んでくれませんでした.
lto などとのからみもあり, LD 別呼び出しではなく, cc/c++ 経由で呼べたほうが理想そうです.

参考文献

llvm では LLVM_ENABLE_LLD では, -fuse-ld=lld 指定で実現しています.

CMAKE_EXE_LINKER_FLAGS, CMAKE_MODULE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS に append しているようです.

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1