You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mac M1交叉编译x86_64 Linux Rust cdylib库链接报错咨询

问题场景

在Mac M1(arm64架构)设备上编译cdylib类型的Rust crate,目标产物为x86_64 Linux平台可用的动态库文件,执行命令如下:

rustup target add x86_64-unknown-linux-gnu
cargo build --target x86_64-unknown-linux-gnu

构建过程中触发报错:

= note: ld: unknown option: --version-script=/var/folders/df/1lz9t40n171_5550cy_f1h3c0000gn/T/rustczqz5TV/list
clang: error: linker command failed with exit code 1 (use -v to see invocation)

报错根因

Mac系统默认自带的clang、ld工具链是为Darwin平台编译设计的,无法识别GNU ld专属的--version-script链接参数,也不能完成Linux平台目标文件的链接工作。仅安装Rust的目标平台三元组、不配置对应的交叉编译工具链,就会触发该链接错误。

操作步骤

1. 安装x86_64 Linux交叉编译工具链

通过Homebrew安装对应平台的编译、链接工具集:

brew install messense/macos-cross-toolchains/x86_64-unknown-linux-gnu

2. 配置Cargo指定交叉链接器

编辑当前用户的Cargo全局配置文件,路径为~/.cargo/config.toml,如果文件不存在则手动创建,添加以下配置段:

[target.x86_64-unknown-linux-gnu]
linker = "x86_64-unknown-linux-gnu-gcc"
ar = "x86_64-unknown-linux-gnu-ar"

3. 配置交叉编译环境变量

在当前终端会话中导入以下环境变量,保证编译、链接流程能正确找到对应平台的工具:

export CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER=x86_64-unknown-linux-gnu-gcc
export CC_x86_64_unknown_linux_gnu=x86_64-unknown-linux-gnu-gcc
export CXX_x86_64_unknown_linux_gnu=x86_64-unknown-linux-gnu-g++
export AR_x86_64_unknown_linux_gnu=x86_64-unknown-linux-gnu-ar

如果需要长期使用该交叉编译配置,可以把上述export语句写入~/.zshrc(对应zsh终端)或~/.bashrc(对应bash终端),执行source对应配置文件后即可永久生效。

4. 重新执行构建

回到项目根目录,重新运行构建命令:

# Debug版本构建
cargo build --target x86_64-unknown-linux-gnu

# 发布版本构建
cargo build --target x86_64-unknown-linux-gnu --release

构建完成后,对应产物会输出在target/x86_64-unknown-linux-gnu/debug/或target/x86_64-unknown-linux-gnu/release/目录下,可直接拷贝到x86_64架构的Linux设备上使用。

补充说明:纯Rust实现的cdylib crate无需额外依赖即可完成编译,如果项目引用了依赖C语言实现的第三方crate,需要额外安装对应平台的C依赖库才能正常构建。

内容的提问来源于stack exchange,提问作者doki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 04:54:28