如何使用带货物的模具链接器?

Mar*_*ett 2 linker rust rust-cargo

我目前使用 lld 作为 Rust 的链接器,但最近遇到了比 lld 更快的模具项目。我想尝试将它用于 Rust 编译,但我不确定如何将它作为链接器传入。在我的.cargo/config文件中,我有:

[target.x86_64-unknown-linux-gnu]
rustflags = [
    "-C", "link-arg=-fuse-ld=lld",
]
Run Code Online (Sandbox Code Playgroud)

但我不能只是将其更改lldmold,或提供mold可执行文件的路径。有没有办法让 gcc 接受链接器的路径?

tim*_*lyo 34

Mold 现在可以与 Clang 一起使用,只需将其添加到~/.cargo/config.toml

[target.x86_64-unknown-linux-gnu]
linker = "/usr/bin/clang"
rustflags = ["-C", "link-arg=--ld-path=/usr/bin/mold"]
Run Code Online (Sandbox Code Playgroud)

注意:/usr/local/bin/mold如果从源安装,模具可能会安装在,因此标志应为rustflags = ["-C", "link-arg=--ld-path=/usr/local/bin/mold"]。运行$ which mold以仔细检查它的安装位置

您可以通过运行来检查它是否有效readelf -p .comment target/<type>/<binary_name>

[target.x86_64-unknown-linux-gnu]
linker = "/usr/bin/clang"
rustflags = ["-C", "link-arg=--ld-path=/usr/bin/mold"]
Run Code Online (Sandbox Code Playgroud)

  • 注意,我安装的 Mold 将可执行文件放入 `/usr/local/bin/mold` (3认同)
  • 上面的内容对我不起作用 - 我需要 `rustflags = ["-C", "link-arg=-fuse-ld=/usr/local/bin/mold"]`,如 https://github 中指定。 com/rui314/mold#如何使用 (3认同)

Rui*_*ama 6

-fuse-ld不幸的是,gcc 不接受任意路径作为 的参数。不要调整.cargo/config文件,而是尝试cargo buildpath/to/mold -run cargo build. 通过这样做,货物模具的影响下运行,并且所有调用/usr/bin/ld/usr/bin/ld.gold/usr/bin/ld.lld拦截和替换mold