rust liunx 下打包成静态单体(像golang一样,无依赖)

在linux下打包成静态单体,第一种方式就是加上的编译目标--target参数,--target的值可以用rustup target list查看

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

还可以用docker容器的方案来打包静态单体。官方rust镜像https://hub.docker.com/_/rust/ 里面有一些如何使用。这里只介绍我用到方式:

1
docker run --rm --user "$(id -u)":"$(id -g)" -v /rust/demo:/usr/src/myapp -w /usr/src/myapp rust:latest rustup target add x86_64-unknown-linux-musl  &&   cargo build --release --target=x86_64-unknown-linux-musl

因为rust官方镜像默认没有安装rx86_64-unknown-linux-musl,所以需要用rustup target add x86_64-unknown-linux-musl 命令进行安装(但这样子,每次都需要下载add x86_64-unknown-linux-musl进行安装,会很费时间,所以可以把当前容器保存为镜像)。

用ldd命令查看打包成的单体执行文件,可以看到无依赖:

1
2
[root@k8s-master connect]# ldd frame-ioc
        不是动态可执行文件