应用程序开发,一般是在个人电脑开发,部署在产线服务器上。而个人电脑可能是Windows,MacOS或者Linux,而线上电脑一般是Linux系统,与个人电脑可能不一致,静态编译类型语言(C/C++,Rust等)直接编译存在兼容问题,这时候就需要在个人电脑上通过交叉编译的方式编译产线服务器对应系统版本的可执行应用程序。

本文记录Windows 10系统配置Rust语言交叉编译Linux应用程序环境

1. 添加需要的target

添加target x86_64-unknown-linux-musl

rustup target add  x86_64-unknown-linux-muslrustup target list
...                                   # 省略其他为安装target显示
x86_64-pc-windows-msvc (installed)    # 这个是windows环境下配置rust默认安装的
x86_64-unknown-linux-musl (installed) # 这个是本次安装的

我们的目标服务器是Linux(CentOS 7),64bit, 所以我们添加的target应该是x86_64-unknown-linux-gnu 或者x86_64-unknown-linux-musl。这2者区别与是动态依赖或者静态依赖:

  • x86_64-unknown-linux-gnu 是动态依赖,目标服务器需要包含动态依赖的相关库(用户共享库),例如:

    在windows环境下编译(已经配置交叉编译x86_64-unknown-linux-gnu环境)
    hello> cargo build --release --target=x86_64-unknown-linux-gnu将目标文件拷贝到目标服务器ldd查下(windows下查看会报错:ldd: hello: Exec format error)
    chmod +x hello
    ldd hello linux-vdso.so.1 (0x00007ffc79991000)libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f351cd7b000)libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f351cb5d000)libdl.so.2 => /lib64/libdl.so.2 (0x00007f351c959000)libc.so.6 => /lib64/libc.so.6 (0x00007f351c5ac000)/lib64/ld-linux-x86-64.so.2 (0x00007f351cf91000)文件大小:3333408
    
  • x86_64-unknown-linux-musl 是静态依赖,目标服务器不需要包含相应的库,但是打包文件会更大些,例如:
    在windows环境下编译(已经配置交叉编译x86_64-unknown-linux-musl环境)
    hello>cargo build --release --target=x86_64-unknown-linux-musl将目标文件拷贝到目标服务器ldd查下(windows下查看会报错:ldd: hello: Exec format error)
    chmod +x hello
    ldd hello statically linked文件大小:3804368
    

2. 配置编译链接程序

在musl.cc网站下载对应的x86_64-linux-musl-cross.tgz,解压到指定目录,然后配置系统环境变量

# step 0, 查找链接(如果事先不知道)
curl -s musl.cc | grep x86https://musl.cc/x86_64-linux-musl-cross.tgz    # 使用的是这个https://musl.cc/x86_64-linux-musl-native.tgzhttps://musl.cc/x86_64-linux-muslx32-cross.tgzhttps://musl.cc/x86_64-linux-muslx32-native.tgzhttps://musl.cc/x86_64-w64-mingw32-cross.tgzhttps://musl.cc/x86_64-w64-mingw32-native.zip# step 1, 下载
https://musl.cc/x86_64-linux-musl-cross.tgz# step 2, 解压到指定目录
C:\Tools\x86_64-linux-musl-cross# step 3, 配置环境变量
我的电脑,属性,高级系统设置,环境变量,系统变量,Path 增加一段新的配置:
C:\Tools\x86_64-linux-musl-cross\bin# step 4, 验证
x86_64-linux-musl-gcc -v
... #省略一堆,最后输出版本号
gcc version 9.2.1 20191214 (GCC)

step3添加环境变量示意图

3. 配置cargo交叉编译target使用的链接程序

windows 10 通过rustup安装的rust环境,cargo家目录为 C:\Users\{具体的用户}\.cargo, 在该目录下编辑配置文件config [或者config.toml] ,没有就创建一个

# C:\Users\oyym\.cargo\config     其中oyym是我的用户名,每个用户都不同的
[target.x86_64-unknown-linux-musl]
linker = "x86_64-linux-musl-gcc"

提示:上述是全局配置,也可以在具体的项目跟目录创建 .cargo/config 文件进行针对具体项目的配置

4. 交叉编译hello项目,并在远程Linux服务器进行验证

# step 1, 创建项目,并交叉编译生成目标应用程序
cargo new hello
cd hello
cargo build --release --target=x86_64-unknown-linux-musl# step 2,将目标应用程序传输到目标服务器
cd target\x86_64-unknown-linux-musl\release
scp hello root@192.168.1.1:/tmp/# step 3,在目标服务器运行目标应用程序
ssh root@192.168.1.1
cd /tmp
chmod +x hello
./hello
Hello, world!  # 这个是输出结果

Windows 10 配置Rust交叉编译Linux应用程序-musl相关推荐

  1. 计算机配置 凭据分配,如何在Windows 10中分配默认凭据提供程序 | MOS86

    点击此处修复Windows错误并提高系统性能 我们都知道Windows 10带有多个登录选项.这是可能的,因为在操作系统中存在各种凭证提供商.在Windows的早期版本Windows XP,Windo ...

  2. Windows 10配置CUDA 9.2

    Windows 10配置CUDA 9.2 本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可. 目录 Windows 10配置CUDA 9.2 目录 配置环境&平台 ...

  3. Windows 10配置GPU环境

    Windows 10配置GPU环境 查看显卡型号 下载安装显卡驱动 下载安装CUDA 查看本机显卡驱动版本 查看CUDA和显卡驱动的对应关系 下载安装CUDA 下载cuDNN 验证安装 验证CUDA ...

  4. 更改应用程序图标_在 Windows 10 version 1903 中查看应用程序是否支持 DPI 感知

    在显示屏幕上,每英寸点数(DPI)定义构成面板的每个物理单元的像素数.传统上,显示器每英寸输出 96 个像素.但随着技术的发展,各大公司的产品已经开始增加同一物理空间中的像素数,也就造成了屏幕的 DP ...

  5. Windows 10配置网络代理服务器

    Windows 10配置网络代理服务器 本文是基于Windows 10系统环境,配置网络代理服务器,Cent OS 7.3希望通过网络参数配置,可以实现通过网络代理服务器连接互联网: Windows ...

  6. Windows 10配置阿里云DNS

    Windows 10配置阿里云DNS 首先需要打开阿里云官方镜像站:https://developer.aliyun.com/mirror/找到DNS服务器地址,再进行后续操作. 1.打开Window ...

  7. Windows 10系统点击任务计划程序,提示找不到远程电脑如何处理

    任务计划是win10中自带的一个功能用来定时执行的程序的一个功能了,但在win10中我们点击任务计划会弹出错误提示,下面我们一起来看Windows 10系统点击任务计划程序,提示找不到远程电脑解决办法 ...

  8. linux(debian系列)和 Windows 10配置seetaface6

    seetaface6依赖于opencv,另外我们需要界面,所以也需要Qt(你也可以选择其他的). 这里的目标是配置好环境,能够编译并运行seetaface6给的demo. 那个demo中用到了sqli ...

  9. 手机怎样运行linux命令行,不仅是命令行 Windows 10 也可以运行 Linux 的图形界面程序了...

    微软在 Build 2016 上宣布这个新闻后,很快就在其发布的 Insider 预览版 14316 上将这个功能展示给了迫不及待的粉丝们.根据微软当前的技术说明,目前除了部分命令行程序不能运行之外, ...

最新文章

  1. 【转载】浏览器事件循环机制(event loop)
  2. ECSHOP学习笔记
  3. import 别名_python中的import、from import以及import as的区别
  4. [程序员必备工具]分享一款不错的个人代码个人知识管理软件wiz
  5. 微服务系统下架构可视化上的探索
  6. 20.校准相机——介绍,使用已知点进行校正,直接线性校准均匀性第1部分,直接线性校准均匀性第2部分_1
  7. DW06、DW07 锂电保护IC手册电路,锂电池过充过放过流短路保护芯片电路
  8. LNMP 常见问题(FAQ)
  9. 设计模式-第一篇之单例模式
  10. 看看这段代码有没有内存泄露?
  11. vue数据大屏使用数字字体
  12. 简单实用的微信缓存框架mmkv
  13. 使用PHP+MYSQL搭建的一款直播电商源码和大家分享一下
  14. python拟合线性函数_Python线性拟合实现函数与用法示例
  15. ubuntu20.04安装qq和微信
  16. iMeta: 整合宏组学重新认识生命和环境科学
  17. 怎么关闭win10虚拟机服务器,大神为你win10系统彻底关闭退出vmware虚拟机的方案...
  18. 测试管理之--文档管理
  19. mysql里面除号写法_MySQL常见函数 - osc_mgt0rm0m的个人空间 - OSCHINA - 中文开源技术交流社区...
  20. 效果炸了,Drawable 实现红鲤鱼动画,点哪儿游哪儿(下)

热门文章

  1. mysql fulltext 不起作用_MySQL FULLTEXT不工作
  2. Packet Tracer(第二期)--7NAT
  3. 打包报错:Generate Signed APK: Errors while building APK. You can find the errors in the ‘Messages‘ view.
  4. 四个翅膀的飞机Simulink与轨迹跟踪仿真
  5. MS SQL恢复操作已将该数据库标记为 suspect,质疑问题有效解决
  6. 研扬工控机自带串口使用
  7. 比尔盖茨经典语录、人生感悟
  8. 【063】原菲尼克斯电气(中国)副总裁丁晓华先生正式加盟翼辉
  9. Angular + ABP 上传图片
  10. 牛客练习赛20 托米历险记