原打算在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/
目录下
Step2 把openssl 也打进静态包
打开cargo.toml
在[dependencies]下面添加:
openssl = {version = "0.10", features = ["vendored"]}
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上是可以正常执行的 : )
网友评论