Rust 学习笔记

Fedora31 rust 交叉编译环境

2020-02-05  本文已影响0人  国服最坑开发

原打算在Fedora31环境中打包cargo build release, 直接放到 centos7 中运行.
但实操中, 发现目标机的openssl 和glibc版本不一致, 每台主机都去独立安装的话体验十分不好.
原因大概是cargo build 使用了动态库链接, 所以生成的包, 会对环境的库有很强关联

解决方法当然还是有的, 既然不确定运行系统的动态库版本, 那么我们就来打一个静态库试试, 而且目标文件是可以在多种Linux架构下执行, 也就是所谓的交叉编译.

Step 1 musl-gcc, 交叉编译环境构建

去官网: https://www.musl-libc.org/download

官网介绍,目标文件支持 i386, x86_64,arm等环境

cd ~
wget https://www.musl-libc.org/releases/musl-1.1.24.tar.gz
tar zxvf musl-1.1.24.tar.gz
cd musl-1.1.24
./configure
make
sudo make install

编译好的文件存放在 /usr/local/musl/ 目录下

musl-gcc
Step2 把openssl 也打进静态包

打开cargo.toml
在[dependencies]下面添加:
openssl = {version = "0.10", features = ["vendored"]}

openssl
Step3 添加musl交叉编译目标

这里要用到 rustup

rustup target add x86_64-unknown-linux-musl

这里会下载一个17MB左右的包,如果下载慢,试一下DNS配置:

180.76.76.76
8.8.8.8
Step4 打包:

这里要使用第一步编译出来的musl-gcc

export PATH=/usr/local/musl/bin:$PATH
cargo build --release --target=x86_64-unknown-linux-musl
目标文件

后面上传到CentOS7上是可以正常执行的 : )

上一篇 下一篇

猜你喜欢

热点阅读