windows上编译linux程序

文章目录

    • 前言
    • Cygwin、MinGW和MSYS2的区别
    • MSYS2的安装和配置
    • 示例

前言

有些项目创建之初,(仅考虑在linux上运行)不考虑在windows原生编译,所以以没有采用跨平台的API进行开发。

后续想要将项目从linux上,移植到windows上运行。要么是重写不能跨平台的代码;要么是在cygwin这样的环境下编译。前者,我做过一遍。后者,本次来尝试下。


Cygwin、MinGW和MSYS2的区别

  • Cygwin 和MinGW 的区别与联系是怎样的? - 知乎
  • windows - What is the difference between Cygwin and MinGW? - Stack Overflow
  • linux - Difference between GNUWin32 and cygwin - Stack Overflow
  • MSYS2 介绍与使用_qq_36525177的博客-CSDN博客

我们首先看下,在windows上编译linux的源码,生成windows上可执行文件,有哪些工具可以使用。

  • Cygwin 是GNU和开源工具的大集合,它们提供类似于 Windows 上 Linux 发行版的功能。cygwin1.DLL是一个提供大量 POSIX API 功能的 DLL。安装过程,可以参考:Windows下Cygwin安装使用教程_Linux教程_Linux公社-Linux系统门户网站。(大概原理是,当程序访问一个linux接口的时候,替换使用cygwin1.DLL中的功能;而cygwin1.DLL中调用的是win api。)

  • MinGW-w64 是Mingw 原始项目的一个进步,支持编译生成64位程序。Mingw-w64包括对GCC、GNU Binutils的Windows版本的移植。安装过程可参考:MinGW-w64 C/C++编译器下载和安装_mingw64_石凌风SLF的博客-CSDN博客(移植的主要是GCC,make,GDB这套编译工具)

  • GnuWin32 Summary 是提供了 Win32版本的 GNU 工具。但移植似乎有些过时了:GnuWin32 (GNU Emacs FAQ For MS Windows)。安装可以参考: Windows下使用Linux命令 - GNUWin32 安装_getgnuwin32_Esiia的博客-CSDN博客 (主要是可以在windows下使用linux中的一些命令和库)

  • What is MSYS2? - MSYS2 是一个工具和库的集合,为您提供了一个易于使用的环境,用于构建、安装和运行本地 Windows 软件。unixy 工具直接基于 Cygwin。Cygwin 专注于在 Windows 上构建 Unix 软件,而 MSYS2则专注于构建基于 Windows API 的本地软件。


MSYS2的安装和配置

上面比较下来,感觉MSYS2会好用些。

  1. 首先是安装MSYS2。下载官网的安装包,安装在默认路径即可:MSYS2。

  2. 在Windows Terminal中扩展为支持 MSYS2 shell,参考Terminals - MSYS2。

  3. MSYS2提供了不同的环境/子系统,您首先必须决定使用哪个环境/子系统。环境之间的差异主要体现在环境变量、默认编译器/链接器、体系结构、使用的系统库等方面。如果您不确定,请使用 UCRT64。

  4. MSYS2使用pacman包管理器安装软件,见Package Management - MSYS2。下面来安装写必要的软件。

    pacman git vim cmake make gcc openssl-dev zlib-devel
    

示例

环境搭建好了,跑个示例验证下。

GitHub - da1234cao/wrk2: Port wrk2 to windows 是个压力测试工具。原来仅在windows上运行。

现在,将代码在MSYS2中编译。可编译,可运行。但请求的平均时间统计不对。lua代码被我修了下,就休不对了。。。有空再调吧。lua不咋会。

git clone [email protected]:da1234cao/wrk2.git
make build && cd build && cmake ..
make

# 提供了打包,但是install taget 的时候,包里的wrk没有exe后缀。。
make package

你可能感兴趣的:(#,cygwin,mingw,msys2)