标签: lld

如何更改默认的 rustc / Cargo 链接器?

我想让 rustclld用作链接器,而不是ld在特定的板条箱中。所以我.cargo/config在我的项目目录中创建以下内容:

[target.x86_64-unknown-linux-gnu]                                                                   
linker = "ld.lld"
Run Code Online (Sandbox Code Playgroud)

这会导致链接器错误:

$ cargo build
...
  = note: ld.lld: error: unable to find library -ldl
          ld.lld: error: unable to find library -lrt
          ld.lld: error: unable to find library -lpthread
          ld.lld: error: unable to find library -lgcc_s
          ld.lld: error: unable to find library -lc
          ld.lld: error: unable to find library -lm
          ld.lld: error: unable to find library -lrt
          ld.lld: error: unable to find library -lpthread
          ld.lld: error: unable to find …
Run Code Online (Sandbox Code Playgroud)

rust rust-cargo lld

19
推荐指数
3
解决办法
6758
查看次数

lld链接器是ld和gold的直接替代品吗?

目前,LLVM项目中链接器lld开发时每周都会添加新功能.它的开发人员承诺lld比它快ld.与之相比,它如何竞争gold

lld是替代品ld吗?随着黄金有一些箍通过跳跃.

linker lld

12
推荐指数
2
解决办法
4627
查看次数

`-rpath-link`和`-L`有什么区别?

国家的人gold:

  -L DIR, --library-path DIR
          Add directory to search path

  --rpath-link DIR
          Add DIR to link time shared library search path
Run Code Online (Sandbox Code Playgroud)

bfd的男人ld让它有点像-rpath-link用于递归包含sos 的声音.

ld.lld 甚至没有将其列为参数.

有人可以为我澄清这种情况吗?

linker ld bfd gold-linker lld

11
推荐指数
2
解决办法
4062
查看次数

LLD - 未知参数:-arch

尝试在Mac OS Sierra上使用LLVM 4.0.0版本(Clang,LLD)链接一个简单的程序.注意,这在Linux中是完全可以实现的.

我当前的路径以LLVM的bin目录为前缀(即/opt/LLVM/4.0.0/bin:$PATH.

program(main.cpp)是最简单的C++应用程序:

int main()
{
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

发出的shell命令是:clang -fuse-ld=lld.
这会因以下错误而失败:

/opt/llvm/4/bin/ld.lld: error: unknown argument: -no_deduplicate
/opt/llvm/4/bin/ld.lld: error: unknown argument: -dynamic
/opt/llvm/4/bin/ld.lld: error: unknown argument: -arch
/opt/llvm/4/bin/ld.lld: error: unknown emulation: acosx_version_min
/opt/llvm/4/bin/ld.lld: error: unable to find library -lto_library
/opt/llvm/4/bin/ld.lld: error: /opt/llvm/4/lib/libLTO.dylib: invalid data encoding
clang-4.0: error: linker command failed with exit code 1 (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)

使用-v开关,我看到这个链接器命令(格式化):

"/opt/llvm/4/bin/ld.lld" \
    -demangle \
    -lto_library /opt/llvm/4/lib/libLTO.dylib \ …
Run Code Online (Sandbox Code Playgroud)

c++ macos linker llvm lld

10
推荐指数
1
解决办法
775
查看次数

如何在 Windows 上将 lld 与 CMake 一起使用?

我正在尝试使用 CMake 和 clang + lld ( http://releases.llvm.org/ ) + mingw ( https://sourceforge )编译 SDL2 ( https://www.libsdl.org/download-2.0.php ) .net/projects/mingw-w64/ ) 头文件在 Windows 10 上。尽管我做了很多努力,但我似乎无法让 CMake 通过 mingw ld 链接器使用 lld 链接器。

我目前使用批处理文件构建 sdl2:

@ECHO OFF

IF NOT EXIST build MKDIR build
PUSHD build

cmake.exe -DCMAKE_BUILD_TYPE=Debug -G "MinGW Makefiles"^
  -DCMAKE_C_FLAGS="-target x86_64-windows-gnu"^
  -DCMAKE_C_COMPILER_ID="Clang" -DCMAKE_C_COMPILER="clang.exe"^
  -DCMAKE_CXX_FLAGS="-target x86_64-windows-gnu"^
  -DCMAKE_CXX_COMPILER_ID="Clang++" -DCMAKE_CXX_COMPILER="clang++.exe"^
  -DDIRECTX=OFF -DSDL_TEST=OFF -DSDL_SHARED=OFF -DSDL_STATIC=ON ..

cmake.exe --build . -- -j %NUMBER_OF_PROCESSORS%

POPD

Run Code Online (Sandbox Code Playgroud)

我试过无济于事:

任何帮助将不胜感激。

c++ windows cmake llvm lld

10
推荐指数
1
解决办法
1676
查看次数

完整和隔离的LLVM/musl工具链

我想要实现的是使用musl as 编译一个GNU独立且隔离的 LLVM工具链.clib

最近LLVM 4.0已经发布了许多新的酷功能,包括生产就绪的LLD,因此链接步骤也可以由LLVM处理.

堆栈或多或少是:

  • LLVM
  • LLD
  • 编译器RT
  • libcxx
  • libcxxabi
  • MUSL

之后,实际上可以在没有太多补丁的情况下这样做(除了编译之外musl),但遗憾的是,没有关于此的良好文档.

有什么建议?

llvm clang toolchain musl lld

7
推荐指数
2
解决办法
1583
查看次数

当使用 GCC 编译但与 LLVM LLD 链接时,LTO 是否有效?

我最近发现了 LLVM 的链接器,lld它因链接速度非常快而受到称赞。事实上,我测试了它,结果非常棒,与gold.

然而,当谈到链接时优化时,我的知识是有限的。据我通过阅读互联网上的内容了解到,目标文件中产生了一些额外的代码,代表一些内部编译器结构,然后在链接阶段使用。因此,我担心链接时优化(及其好处)是否受到此编译器/链接器组合的影响。我希望对此事有一些解释!

我使用了gcc版本9.2.0lld版本10.0.0

我用来生成目标文件的命令:

/opt/gcc/9.2.0/bin/c++ -fPIE -flto -ffat-lto-objects -fuse-linker-plugin -m64 -O3 -g -DNDEBUG -o my_object.cpp.o -c my_source_file.cpp
Run Code Online (Sandbox Code Playgroud)

对于链接:

#-fuse-ld=gold
/opt/gcc/9.2.0/bin/c++ -fPIE -flto -ffat-lto-objects -fuse-linker-plugin -m64 -pie -fuse-ld=gold -Wl,-z,relro -Wl,-z,now -Wl,--as-needed -static-libstdc++ -static-libgcc -Wl,--threads -Wl,--thread-count,1
#-fuse-ld=lld
/opt/gcc/9.2.0/bin/c++ -fPIE -flto -ffat-lto-objects -fuse-linker-plugin -m64 -pie -fuse-ld=lld -Wl,-z,relro -Wl,-z,now -Wl,--as-needed -static-libstdc++ -static-libgcc -Wl,--threads -Wl,
Run Code Online (Sandbox Code Playgroud)

c++ linker gcc llvm lld

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

在 macOS 上将 -fuse-ld=lld 与 Clang 结合使用

我在 macOS 10.15 上使用 Clang 10(不是 AppleClang),并尝试通过-fuse-ld=lld在 CMake flags 中指定来与 LLD 链接CMAKE_EXE_LINKER_FLAGS

但是,当我尝试使用 LLD 时,出现以下错误:

The C++ compiler

"/Users/XXX/llvm/bin/clang++"

is not able to compile a simple test program.

It fails with the following output:

ld64.lld: warning: ignoring unknown argument: -platform_version
ld64.lld: warning: ignoring unknown argument: -search_paths_first
ld64.lld: warning: ignoring unknown argument: -headerpad_max_install_names
ld64.lld: warning: -sdk_version is required when emitting min version load command.  Setting sdk version to match provided min version
ld64.lld: error: Unable to find …
Run Code Online (Sandbox Code Playgroud)

c++ macos cmake clang lld

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

即使传递了 -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
查看次数

Rust 是否使用 lld 链接器作为标准

我已经开始写《Rust 零性能》一书。本文讨论使用 lld 链接器而不是标准 rust 链接器来加快编译时间。然而,这本书现在已经出版了大约一年,它提到正在努力使 lld 尽可能成为 Rust 中的标准链接器。

有谁知道这部作品的进度吗?rust 是否使用 ldd 链接器作为标准,如果不是,则使用它时编译时间仍然存在显着差异。

linker rust lld

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

标签 统计

lld ×10

c++ ×5

linker ×5

llvm ×4

clang ×3

cmake ×2

macos ×2

rust ×2

bfd ×1

clang++ ×1

gcc ×1

gold-linker ×1

ld ×1

lto ×1

musl ×1

rust-cargo ×1

toolchain ×1

windows ×1