错误:使用cargo从windows交叉编译一个rust项目到linux时出现“找不到链接器‘cc’”

Yax*_*lat 7 linux windows cross-compiling rust rust-cargo

我有一个基本的 rust/cargo 项目,它有一个主文件和一些基本的依赖项。cargo build当未指定目标时,该命令可以正常工作(我使用的是 Windows,因此它会构建到 Windows),但是当我尝试使用cargo build --target=x86_64-unknown-linux-gnuor将程序交叉编译到 linux 时cargo build --target=x86_64-unknown-linux-musl,该过程失败并出现以下错误:linker 'cc' not found.

有谁知道如何解决这个问题?我需要安装特定的链接器吗?

谢谢。

Yax*_*lat 5

我刚刚想通了。

事实证明,您需要告诉货物使用 LLVM 链接器。为此,您可以.cargo在基本目录中创建一个名为的新目录,然后config.toml在此目录中创建一个新文件。您可以在此处添加以下行:

[target.x86_64-unknown-linux-musl]
rustflags = ["-C", "linker-flavor=ld.lld"]
Run Code Online (Sandbox Code Playgroud)

然后使用命令构建cargo build --target=x86_64-unknown-linux-musl应该可以工作!

  • 所以上面的内容对我不起作用(我收到了关于缺少 lld 的错误),但是下面的内容确实有效。`[target.x86_64-unknown-linux-musl] 链接器 = "rust-lld"` (5认同)

Twi*_*ton 5

这篇文章总结了 Yaxlat 和 Rory Sullivan 的两个回复 - 谢谢你们:

在基目录中新创建的目录 .cargo 中创建一个名为 config.toml 的文件。

该文件包含以下内容:

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

在终端输入这两条命令

rustup target add x86_64-unknown-linux-musl

cargo build --target=x86_64-unknown-linux-musl
Run Code Online (Sandbox Code Playgroud)

Linux 的可执行二进制文件现在位于目标目录中。