MacOS中Rust交叉编译

别的环境可以参考macos的交叉编译方式来实现

1. 简介

  1. 命令行下,国内需要设置下科学上网:
1
export https_proxy=http://127.0.0.1:1087 http_proxy=http://127.0.0.1:1087 all_proxy=socks5://127.0.0.1:1080
  1. 目前macos交叉编译rust,一般使用如下两种方式:
    1. x86_64-unknown-linux-gnu 更快、生成动态链接库,依赖所在平台安装glibc,实践证明,macos建议使用该方式
    2. x86_64-unknown-linux-musl 轻量、无依赖,能运行在任何linux系统。缺点是编译后程序比glibc慢点。实践发现,macos中编译librocksdb-sys会发现很多问题,还是用gnu方式更好点

2. 使用x86_64-unknown-linux-gnu

macos建议使用该方式

1
2
3
4
5
6
7
8
9
# 安装target
rustup target add x86_64-unknown-linux-gnu

# 安装链接器
brew install SergioBenitez/osxct/x86_64-unknown-linux-gnu

# bin链接 根据需要,看是否需要从/usr/local/bin/中ln,一般需要x86_64-linux-gnu-g++:
ln -s /usr/local/bin/x86_64-unknown-linux-gnu-g++ /usr/local/bin/x86_64-linux-gnu-g++
ln -s /usr/local/bin/x86_64-unknown-linux-gnu-gcc /usr/local/bin/x86_64-linux-gnu-gcc

之后,在./cargo/config.toml中,加入如下内容:

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

之后就可以常规编译项目路:

1
cargo build --release --target x86_64-unknown-linux-gnu

如果要是你的程序依赖原生库,需要设置一个环境变量

1
TARGET_CC=x86_64-linux-gnu-gcc cargo build --release --target x86_64-unknown-linux-gnu

3. 使用x86_64-unknown-linux-musl

macos如果非必要,不建议使用该方式

1
2
3
4
5
6
7
8
9
# 安装target
rustup target add x86_64-unknown-linux-musl

# 安装链接器
brew install filosottile/musl-cross/musl-cross

# bin链接 根据需要,从/usr/local/bin/中ln,一般需要musl-g++
ln -s /usr/local/bin/x86_64-linux-musl-g++ /usr/local/bin/musl-g++
ln -s /usr/local/bin/x86_64-linux-musl-gcc /usr/local/bin/musl-gcc

之后,在./cargo/config.toml中,加入如下内容:

1
2
[target.x86_64-unknown-linux-musl]
linker = "x86_64-linux-musl-gcc"

之后就可以常规编译项目路:

1
cargo build --release --target x86_64-unknown-linux-musl

如果要是你的程序依赖原生库,需要设置一个环境变量

1
TARGET_CC=x86_64-linux-musl-gcc cargo build --release --target x86_64-unknown-linux-musl

总结

编辑完毕

  • Copyrights © 2017-2023 Jason
  • Visitors: | Views:

谢谢打赏~

微信