前言
有些项目创建之初,(仅考虑在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会好用些。
-
首先是安装MSYS2。下载官网的安装包,安装在默认路径即可:MSYS2。
-
在Windows Terminal中扩展为支持 MSYS2 shell,参考Terminals - MSYS2。
-
MSYS2提供了不同的环境/子系统,您首先必须决定使用哪个环境/子系统。环境之间的差异主要体现在环境变量、默认编译器/链接器、体系结构、使用的系统库等方面。如果您不确定,请使用 UCRT64。
-
MSYS2使用pacman包管理器安装软件,见Package Management - MSYS2。下面来安装写必要的软件。
pacman git vim cmake make gcc openssl-dev zlib-devel
示例
环境搭建好了,跑个示例验证下。
GitHub - da1234cao/wrk2: Port wrk2 to windows 是个压力测试工具。原来仅在windows上运行。文章来源:https://www.toymoban.com/news/detail-488516.html
现在,将代码在MSYS2中编译。可编译,可运行。但请求的平均时间统计不对。lua代码被我修了下,就休不对了。。。有空再调吧。lua不咋会。文章来源地址https://www.toymoban.com/news/detail-488516.html
git clone git@github.com:da1234cao/wrk2.git
make build && cd build && cmake ..
make
# 提供了打包,但是install taget 的时候,包里的wrk没有exe后缀。。
make package
到了这里,关于windows上编译linux程序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!