由编译rsync想到的,MSYS2 VS CYWIN

作者:庄晓立(Liigo),日期:20230812。

前言:rsync for Windows

因工作需要在Windows服务器上部署运行rsync,可rsync官方并不提供Windows版本。所以我想着能不能自己编译它的源代码。首先想到的是WSL2环境,结果在里面编译出来的是ELF文件,并不是EXE,在Windows里根本无法运行。后面又想到了MSYS2和Cygwin。

MSYS2

MSYS2是运行在Windows系统上的一个Linux运行环境和编译环境,其编译结果是Windows程序。有些Linux开源项目官网不提供Windows版可执行文件,只能自己下载源码编译,这种情况下MSYS2就有用武之地了(注:前提是项目源码是跨平台的,否则MSYS2也无能为力)。MSYS2有终端有Shell有各种工具应用,MSYS2内置了包管理工具Pacman,通过它可以安装GCC,安装第三方项目开发库。Pacman使得安装开源项目的依赖项变得容易。

MSYS2与WSL的区别:MSYS2里的gcc编译出的是Windows应用(PE/EXE/DLL),而WSL里的gcc编译出的是Linux应用(ELF/SO)。

Pacman配置和更新/安装GCC和第三方库

  • 配置国内源:sed -i "s#https\?://mirror.msys2.org/#https://mirrors.tuna.tsinghua.edu.cn/msys2/#g" /etc/pacman.d/mirrorlist*
  • 更新MSYS2:pacman -Suy
  • 安装GCC:pacman -S mingw-w64-ucrt-x86_64-gcc
  • 安装第三方库:pacman -S mingw-w64-ucrt-x86_64-XXX(其中XXX为库名称,例如openssl)

注意安装包都要加上前缀mingw-w64-ucrt-x86_64-(我被坑过,它为啥不自动加上前缀)。终于明白了,它有多个启动入口(msys2.exe/ucrt64.exe/mingw64.exe/…),不同入口有不同的默认系统前缀。我们应该选择ucrt64.exe入口,其默认前缀应该是mingw-w64-ucrt-x86_64- 不对,它推荐使用且默认启动的就是UCRT64环境入口ucrt64.exe参考)。

在MSYS2内编译rsync以失败告终

我用了两天时间尝试在MSYS2内编译rsync,折腾出很多问题,不得不放弃,原因最终归结为:rsync源码本身不跨平台,不支持在Windows系统运行,因而无法直接编译Windows版本。说实话这事不能怨MSYS2,巧妇难为无米之炊嘛,MSYS2是提供了Windows的头文件和库,rsync源码不去调用谁也没招。网上倒是有人提供rsync的Windows版本下载,估计它们大幅修改了rsync源码。(备注:此处理解可能有误。)

用Pacman安装rsync成功

pacman -S rsync直接安装,目标文件在/usr/bin/rsync.exe,大小535KB,运行时依赖 msys-2.0.dll, msys-crypto-3.dll, msys-lz4-1.dll, msys-iconv-2.dll, msys-xxhash-0.dll, msys-zstd-1.dll 等运行库,exe和dll加起来共计10MB。这样看来MSYS应该也是可以编译rsync源码呀(要不然它这个rsync.exe哪来的呢)。我前面的理解可能有误。

Cygwin

Cygwin安装rsync.exe

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值