关于Rust使用cross进行交叉编译,openssl报错
遇到错误详情
解决:使用cross交叉编译,确保已经安装好了openssl的相关依赖,但是依然报和openssl有关的错误,此时需要在 Cargo.toml 添加openssl的依赖
查看:https://github.com/sfackler/rust-openssl?tab=readme-ov-file
1 [target.'cfg(not(target_os="windows"))'.dependencies] 2 openssl = { version = "0.10", features = ["vendored"] }
首先我在window平台上和window子系统Ubuntu上编译,使用 cross build --release 都是成功的,但是当我加入 --target=xxx.xxx.xx 参数的时候,就会报错,就没考虑是依赖的问题
关于rust交叉编译,有很多做了详细介绍,我对于原理也不是很懂,但还是记录下自己使用cross进行交叉编译的过程,实现过程还是比较简单的
查询支持的平台参数
1 # 查询可用的目标列表,已安装列表后边有(installed) 2 rustup target list 3 4 # 列出所安装的Rust编译器已知的所有目标平台 5 rustc --print target-list 6 7 # 查询已安装的编译器和toolchain 8 rustup show
添加 target
1 # 添加 2 rustup target add x86_64-unknown-linux-musl
安装交叉编译工具
1 cargo install cross
cargo/config.toml文件配置
1 [target.x86_64-unknown-linux-musl] 2 linker = "rust-lld" 3 rustflags = ["-C", "linker-flavor=ld.lld"] 4 5 [target.x86_64-pc-windows-msvc] 6 rustflags = ["-C", "target-feature=+crt-static"]
编译打包
1 cross build --release --target=x86_64-unknown-linux-musl
其他:
在某天早上还能成功编译,到下午再次编译又遇到了其他问题
被这些问题折腾累了,放弃使用cross进行交叉编译.
1. 编译window版本,直接在window机器上 cargo build --release 编译;
2. 编译linux版本,在window的linux子系统中 cargo build --release 编译,也可以使用 cargo build --release --target x86_64-unknown-linux-musl 编译;
相关知识点
编译过程
交叉编译
静态链接和动态链接