我希望在特定的箱子中使rustc使用 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"
(这应该是默认值,对吗?),那我得到的就是
同样的事情也适用于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
,它就可以正常工作(没有错误,并且从编译后的二进制文件中我可以看到它确实与lld
链接)。然而,我不想让lld
成为我的系统范围内的链接器,我只想在特定的Rust创建中使用它。
那么,更改默认的rustc链接器的正确方法是什么?
clang
用作链接器会发生什么? - Jmb