美文网首页Rust 学习笔记
Fedora31 rust 交叉编译环境

Fedora31 rust 交叉编译环境

作者: 国服最坑开发 | 来源:发表于2020-02-05 11:16 被阅读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上是可以正常执行的 : )

    相关文章

      网友评论

        本文标题:Fedora31 rust 交叉编译环境

        本文链接:https://www.haomeiwen.com/subject/qjmjxhtx.html