小编Sim*_*lli的帖子

即使传递了 -fno-lto ,lld 也会运行 LTO

我有一个 CMake 项目,其中有几个子项目,这些子项目创建使用-flto=thin.

该项目有很多与上述库相关的测试。使用 LTO 需要花费大量时间来构建测试,因此我已禁用 LTO 进行使用-fno-lto.

但我注意到,lld即使使用-fno-lto. 如果我运行链接器,--time-trace我可以看到大部分时间都花在了 LTO 上。

我的问题是:

  1. 这是预期的吗?如果是这样,我可以假设lld只要在它链接的对象中找到 LTO 信息,就会执行 LTO。
  2. 如果没有,有没有办法禁用这种行为?添加-fno-lto到编译器似乎不起作用,并且lld没有显式禁用 LTO 的参数。
  3. 如果不是,这是一个错误吗?

更新1:

这就是我lto在 CMake 中的处理方式:

# Enable Thin LTO only on non-test targets.
if(ENABLE_LTO)
  if (IS_TEST)
    target_compile_options(${TARGET} PRIVATE -fno-lto)
    # Probably pointless.
    target_link_options(${TARGET} PRIVATE -fno-lto)
  else()
    message(STATUS "ENABLE_LTO on target ${TARGET})")
    target_compile_options(${TARGET} PRIVATE -flto=thin)
    target_link_options(${TARGET} PRIVATE -flto=thin -Wl,--thinlto-cache-dir=${CMAKE_BINARY_DIR}/lto.cache)
  endif()
endif()
Run Code Online (Sandbox Code Playgroud)

c++ clang clang++ lto lld

7
推荐指数
1
解决办法
2241
查看次数

标签 统计

c++ ×1

clang ×1

clang++ ×1

lld ×1

lto ×1