在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
关于交叉编译一般编程阶段用的是Windows或者Mac系统,部署平台是Linux,这种情况下就需要使用Cross-Compiler交叉编译,意思是可以在当前平台Host下编译出目标平台target的可执行文件, 尤其是做ARM平台开发的同学对这个更为熟悉。 Rust交叉编译在Github上有一个文档Rust核心员工 如果要求比较简单,都是 musl工具链(编译Linux环境程序所需)musl实现了 当然,关于静态链接与动态链接各有优缺点,这里不细说。 安装一下 rustup target add x86_64-unknown-linux-musl 安装musl-cross brew install filosottile/musl-cross/musl-cross windows-gnu相关(编译Windows环境程序所需)安装windows-gnu, 用msvc容易编译失败,msvc其实就是指编译出来的程序直接依赖Windows平台的基础库,而gnu的则是开源的基础库直接内嵌到咱们编译的程序里,所以msvc的程序要更小。 rustup target add x86_64-pc-windows-gnu 安装mingw-w64 brew install mingw-w64
Rust程序示例main.rs fn main() { println!("Hello, world!\r\nwww.qttc.net\r\n"); }
配置和打包编译配置config vi ~/.cargo/config(没有新建即可,另外可在项目根目录下创建.cargo/config文件,只对当前项目生效) 内容如下: [target.x86_64-unknown-linux-musl] linker = "x86_64-linux-musl-gcc" [target.x86_64-pc-windows-gnu] linker = "x86_64-w64-mingw32-gcc" ar = "x86_64-w64-mingw32-gcc-ar"
编译(Linux环境程序) cargo build --release --target x86_64-unknown-linux-musl 可把编译命令写到脚本中: 编译命令整理为sh可执行文件脚本(package_linux.sh,放在项目根目录,给与执行权限chmod +x package_linux.sh)如下: if [[ $(echo $0 | awk '/^\//') == $0 ]]; then ABSPATH=$(dirname $0) else ABSPATH=$PWD/$(dirname $0) fi cd ${ABSPATH} cargo build --release --target x86_64-unknown-linux-musl 编译出来后在target里会有个x86_64-unknown-linux-musl目录,里面又根据--release有debug和release目录,其中名为项目名的文件就是打包出来的Linux环境程序软件。
编译(Windows环境程序) cargo build --release --target x86_64-pc-windows-gnu 也可把编译命令写到脚本中: 编译命令整理为sh可执行文件脚本(package_win.sh,放在项目根目录,给与执行权限chmod +x package_win.sh)如下: if [[ $(echo $0 | awk '/^\//') == $0 ]]; then ABSPATH=$(dirname $0) else ABSPATH=$PWD/$(dirname $0) fi cd ${ABSPATH} cargo build --release --target x86_64-pc-windows-gnu 编译出来后在target里会有个x86_64-pc-windows-gnu目录,里面又根据--release有debug和release目录,其中xxx.exe为打包出来的Windows环境程序软件。
参考: 2. https://www.cnblogs.com/silentdoer/p/13024037.html 3. https://blog.csdn.net/weixin_32827751/article/details/113998427
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论