WinLibs简介及设计理念

WinLibs

WinLibs是mingw在Windows平台的分发库

WinLibs专注于Windows下的GCC。优点是发布比较及时,发行版本丰富多样。免安装,多版本可以共存。

下载链接:

https://winlibs.com/

GitHub:

https://github.com/brechtsanders/winlibs_mingw/releases

WinLibs的设计理念

Winlibs的目标是成为微软Windows开发人员的开发生态系统,通过秉承一套设计决策来解决许多问题。

目标Windows

winlibs.com的目标是提供一系列针对原生 Microsoft Windows 的工具和库,以便在Microsoft Windows上使用。

可以使用MinGW-w64在其他平台(例如Linux)上构建Windows软件——这种实践称为交叉编译。然而,这对于一个新手用户来说并不容易,特别是如果这个用户更熟悉Microsoft Windows环境,甚至可能不熟悉命令行环境。这就是为什么winlibs.com的重点完全是Windows。不需要其他操作系统的知识。如果使用IDE,也不需要命令行知识。

提高软件的可移植性

虽然主要关注Windows,但使用的大多数工具和库都来自Linux和类Unix世界。由于相同的工具是共享的(例如GNU编译器集合),因此编写运行于其他操作系统(如Linux或macOS)的软件更容易。另一方面,如果其他平台已存在的代码,移植到Windows上可能会更容易。

选择工具

编译器

在过去,有几个开源解决方案可以为Windows构建软件:

  • Cygwin - 模拟 POSIX API,允许编译来自 Linux/Unix 世界的源代码。然而,这个模拟层有它的性能影响,它也意味着生成的二进制文件不是 Windows 原生的。
  • MinGW - “Minimalist GNU for Windows” 的缩写,生成原生 Windows 二进制文件,但不支持更新的 Windows 特性,也不支持 Windows 64位。
  • MinGW-w64 - MinGW-w64 是原始 mingw.org 项目的升级版,创建 MinGW-w64 是为了支持 Windows 系统上的 GCC 编译器。派生于2007年,为了提供对64位和新api的支持。

由 winlibs.com 提供的编译器工具主要是基于MinGW-w64并结合了GNU编译器集合,但也添加了其他构建软件,如 LLVM/Clang 和各种汇编器。

shell

由于许多开源软件最初并不打算用于Windows,因此通常需要一个类似Linux/Unix的shell来构建这些软件(例如当使用Autotools时):

  • Cygwin - 附带一个Bash shell,但附带其仿真层性能开销。
  • MSYS - 使用Cygwin构建的Bash shell环境,也很慢。
  • MSYS2 - 重写MSYS使用Cygwin和MinGW-w64来构建,它比MSYS或Cygwin快得多。

MSYS2附带了一个包管理器,它也允许安装自己构建的MinGW-w64和GNU编译器集合,但是这些不会被使用,因为它们并不总是遵循与winlibs.com相同的原则。

线程模型

MinGW-w64可以用2种不同的多线程模型构建:

  • win32 - 标准的Windows多线程功能,没有c++ 11多线程功能。
  • posix - posix线程兼容实现(使libgcc依赖于libwinpthreads),包括c++ 11/C11多线程特性。

为了最大限度地提高兼容性和可移植性,选择了posix线程模型。应用程序仍然可以使用Win32 API或pthreads API。

不混合

某些东西不应该混在一起,因为它们经常导致问题:

  • 32位和64位Windows的分离 — 很多人在链接他们的软件时都很纠结,因为他们有时会不小心把32位和64位的Windows库混在一起。为了避免这种混淆,两个平台是完全分开的。例如,没有提供生成32位输出的64位编译器。
  • 所有库都使用相同的编译器构建 — 不会使用从其他地方以二进制形式下载的库或使用其他编译器(例如MSVC)编译的库。
  • 异常处理方法不应该混合使用。可用的异常处理方法取决于平台(Windows 32位或Windows 64位)。
    • DW2 (DWARF-2) — 需要使用DWARF-2(或DWARF-3)调试信息,并且可能导致可执行文件稍微膨胀,因为必须在可执行文件中包含大型调用堆栈展开表
    • SJLJ (setjmp/longjmp) — 比DW2慢(在没有抛出异常的情况下,即使正常执行也会受到惩罚),但可以跨未使用GCC编译或没有调用堆栈展开信息的代码工作
    • SEH(结构化异常处理) - 本地的Windows异常处理机制,在32位的Windows上GCC还不支持
  • 经过广泛的辩论(见:议题 #4 和 #20),并经过慎重考虑,选择了以下异常处理方法:
    • Windows 32位:DW2 (DWARF-2)
    • Windows 64位:SEH(结构化异常处理)

共存

winlibs.com生态系统没有Windows安装程序,因此它不需要管理员权限来安装,也不会修改系统(例如,通过写入Windows注册表或更改PATH环境变量)。简单地提取独立包就足够开始了。你甚至可以把它放在可移动驱动器上(比如u盘)。

多个winlibs.com工具链可以存在于同一系统的不同文件夹中(例如32位和64位,甚至不同的发布版本)。

由于系统没有被修改,其他安装的构建环境不会损坏(例如MSVC)。

这使得它很容易试用。要删除,只需删除文件夹就可以。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值