• 那是从何处传来的钟声呢?偶尔听到那钟声,平添一份喜悦与向往之情。

Rust交叉编译Mac编译Linux/Windows平台

后端 Nanait 6个月前 (11-07) 193次浏览 已收录 0个评论 扫描二维码
文章目录[隐藏]

关于交叉编译

一般编程阶段用的是 Windows 或者 Mac 系统,部署平台是 Linux,这种情况下就需要使用 Cross-Compiler 交叉编译,意思是可以在当前平台 Host 下编译出目标平台 target 的可执行文件,

尤其是做 ARM 平台开发的同学对这个更为熟悉。

Rust 交叉编译在 Github 上有一个文档 Rust 核心员工 Jorge Aparicio 提供的一份文档 https://github.com/japaric/rust-cross,推荐大家仔细的读一读。

如果要求比较简单,都是 X86_64 架构,从 Mac 上编译出 unknow-linux/pc-windows-gnu 就好。

musl 工具链(编译 Linux 环境程序所需)

musl 实现了 Linux libc,质量可靠,适配所有 Linux 环境,使用静态连接替换动态链接,这样就能打出一个完整的二进制文件,可以丢到任何 Linux 环境里运行。

当然,关于静态链接与动态链接各有优缺点,这里不细说。

安装一下

rustup target add x86_64-unknown-linux-musl

安装 musl-cross

brew install filosottile/musl-cross/musl-cross

windows-gnu 相关(编译 Windows 环境程序所需)

安装 windows-gnu,

用 msvc 容易编译失败,msvc 其实就是指编译出来的程序直接依赖 Windows 平台的基础库,而 gnu 的则是开源的基础库直接内嵌到咱们编译的程序里,所以 msvc 的程序要更小。

rustup target add x86_64-pc-windows-gnu

安装 mingw-w64

brew install mingw-w64

Rust 程序示例

main.rs

fn main() {
println!("Hello, world!\r\nwww.qttc.net\r\n");
}

配置和打包编译

配置 config

vi ~/.cargo/config(没有新建即可,另外可在项目根目录下创建.cargo/config 文件,只对当前项目生效)

内容如下:

[target.x86_64-unknown-linux-musl]
linker = "x86_64-linux-musl-gcc"
[target.x86_64-pc-windows-gnu]
linker = "x86_64-w64-mingw32-gcc"
ar = "x86_64-w64-mingw32-gcc-ar"

编译(Linux 环境程序)

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

可把编译命令写到脚本中:

编译命令整理为 sh 可执行文件脚本(package_linux.sh,放在项目根目录,给与执行权限 chmod +x package_linux.sh)如下:

if [[ $(echo $0 | awk '/^\//') == $0 ]]; then
ABSPATH=$(dirname $0)
else
ABSPATH=$PWD/$(dirname $0)
fi
cd ${ABSPATH}
cargo build --release --target x86_64-unknown-linux-musl

编译出来后在 target 里会有个 x86_64-unknown-linux-musl 目录,里面又根据–release 有 debug 和 release 目录,其中名为项目名的文件就是打包出来的 Linux 环境程序软件。

编译(Windows 环境程序)

cargo build --release --target x86_64-pc-windows-gnu

也可把编译命令写到脚本中:

编译命令整理为 sh 可执行文件脚本(package_win.sh,放在项目根目录,给与执行权限 chmod +x package_win.sh)如下:

if [[ $(echo $0 | awk '/^\//') == $0 ]]; then
ABSPATH=$(dirname $0)
else
ABSPATH=$PWD/$(dirname $0)
fi
cd ${ABSPATH}
cargo build --release --target x86_64-pc-windows-gnu

编译出来后在 target 里会有个 x86_64-pc-windows-gnu 目录,里面又根据–release 有 debug 和 release 目录,其中 xxx.exe 为打包出来的 Windows 环境程序软件。

参考:
1.  https://www.qttc.net/529-rust-cross-compile-mac-to-linux.html


何处钟 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Rust 交叉编译 Mac 编译 Linux/Windows 平台
喜欢 (0)
[15211539367@163.com]
分享 (0)

您必须 登录 才能发表评论!