gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 08:00:09 30 4
gpt4 key购买 nike

我想让 rustc 在特定的 crate 中使用 lld 作为链接器而不是 ld。因此,我在我的项目目录中创建了 .cargo/config,内容如下:

[target.x86_64-unknown-linux-gnu]                                                                   
linker = "ld.lld"

这会导致链接器错误:

$ 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 library -lutil
ld.lld: error: unable to find library -lutil

rust-lld 相同。如果我设置 linker = "ld"(这应该是默认设置,对吧?),我就得到了

  = note: ld: cannot find -lgcc_s

我试图手动解决所有缺失的库(使用 -C link-arg=--library-path=/usr/lib/x86_64-linux-gnu 等),但它只会导致错误的链接和段错误二进制文件。

有趣的是,如果我将 /usr/bin/ld 替换为指向 /usr/bin/ld.lld 的符号链接(symbolic link),效果很好(没有错误,并且从编译的二进制文件中我看到它确实与 lld 链接)。但是,我不想让 lld 成为我的系统级链接器,我只想在特定的 Rust crate 中使用它。

那么更改默认 rustc 链接器的正确方法是什么?

最佳答案

感谢@Jmb 评论,我找到了解决方案。事实证明,rustc 使用的默认链接器实际上是 cc(这是有道理的 - 它提供编译/链接 C 代码所需的所有默认值,这也适用于 Rust) .我们可以将参数传递给 cc 以使其与 lld 链接:

[target.x86_64-unknown-linux-gnu]
rustflags = [
"-C", "link-arg=-fuse-ld=lld",
]

现在 cargo buildlld 链接。

关于rust - 如何更改默认的 rustc/Cargo 链接器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57812916/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com