MinGW-w64离线安装程序

20

有没有离线安装mingw-w64的方法?我尝试了很多官方来源,但似乎全部都需要某种形式的互联网连接。我正在寻找适用于x32和x64系统的解决方案。我尝试查看官方存储库,但我不确定我需要哪些文件来完成此任务。

提前感谢!


1
可能是是否有离线的MinGW安装程序?的重复问题。 - user4183195
4个回答

19
尽管以下内容尚未完全测试,但离线安装程序似乎是不必要的。基于某些错误报告的屏幕截图,在线安装程序会询问以下问题...
Version .......... seems to be the GNU GCC version number
Architecture ..... i686 / x86_64
Threads .......... posix / win32
Exception ........ dwarf / sjlj / seh
Build Revision ... 0 / 1 / 2 / ...

Install folder ... e.g. c:\mingw

Create desktop shortcuts?

第一组有5个选项,用于选择单个下载包。我不知道你怎么想,但我不知道该如何选择线程和异常。基于下载统计数据,posix线程的使用量是win32的两倍以上,64位系统中seh似乎更受欢迎,32位系统中dwarf更受欢迎,sjlj似乎不太受欢迎。我猜默认情况下是32位posix和dwarf。

为了确定这些选择是什么,它会使用来自this folder的文件repository.txt。那只是一个用管道分隔的文本文件——5个主要选项的5个字段,以及一个用于下载包的URL。

顺便说一句,如果有人知道在哪里找到安装程序的源代码,我将非常感激——我已经四处寻找,找到了错误报告等内容,但没有找到安装程序的源代码。不过,mingw-64二进制包的源代码很容易找到。

二进制软件包本身位于此文件夹(Win32)此文件夹(Win64)的子文件夹中。
我不确定安装程序提供的快捷方式是用来干什么的 - 这是MinGW-w64,而不是MSYS或MSYS2,因此没有基于bash的shell提供快捷方式。可能它们只是设置了路径的Windows命令提示符快捷方式。
除了快捷方式问题之外,您所要做的就是将软件包解压缩到适当的文件夹中,确保mingw32 \ bin或mingw64 \ bin文件夹以某种方式在路径上,并且您应该完成了。我已经使用其中一个32位gcc-5.4.0软件包进行了测试 - g ++编译了一个hello-world,没有任何问题。

有一些替代的第三方构建,位于更远的一个步骤之外的子文件夹中(32位)这里以及不同的工具链目标*文件夹下的类似子文件夹中,用于64位和其他构建。ray_linn有各种构建,包括Ada(和Objective C/C++?)支持。rubenvb有一些旧的GCC和Clang版本。dongsheng-daily看起来像是每天的构建,甚至包括实验性的GCC 7。

如果您需要MSYS,请在评论中告诉我。我已经离线安装了它(以及MinGW32)一段时间了,所以我有一个要安装的软件包列表。你需要相当多的软件包,从SourceForge获取它们很麻烦,但一旦你有了它们,就基本上只需要解压缩。还有一些小的“后安装”工作-主要是创建某些文件,指明MinGW的位置,以及创建一个快捷方式到shell。我有AutoIt脚本来完成这个工作-有点混乱,使用了不适当的方法,因为当时我在AutoIt中知道的就是这些方法,但它们可以正常工作。

有MSYS2,但乍一看这是另一个需要在线安装的问题,使用pacman包管理器 - 可能非常方便,但对于不能使用它的少数人来说不是一个好选择。


太好了。感谢指出repository.txt文件。我复制了所需版本的URL,并将其粘贴到浏览器中以下载.7z文件。然后,我通过SneakerNet将其移动到离线PC上并解压缩。gFortran运行正常。 - riderBill
我在我的(在线)笔记本电脑上运行了mingw-w64-install.exe。安装的顶级目录中有四个文件不在.7z文件中:uninstall.exe,uninstall.ini,mingw-w64和mingw-w64.bat。mingw-w64是一个快捷方式。mingw-w64.bat将bin目录添加到PATH并打开cmd窗口。更有趣的是,“Windows卸载或更改程序”显示新安装的MinGW-W64。如果安装程序没有在注册表中放置任何内容,Windows就不会知道MinGW-W64,对吧?你认为这是怎么回事? - riderBill
@riderBill - 对不起,我认为你对于卸载程序的注册表是正确的,但是我现在没有使用离线的“安装”。据我记得,官方的MinGW32和MSYS安装程序也会执行他们需要的注册卸载器的所有工作,但那只是用于注册表的唯一用途。如果我自己“安装”,那么卸载(删除文件夹)也不会困扰我。现在,我在Windows中没有经常进行编程,但是我买了一个win7pro许可证,专门在Linux虚拟机中运行它,以便我可以将其联机,并且我偶尔在上面运行MSYS2。 - user180247
注册卸载程序是有意义的。我为什么没想到呢?<:^| - riderBill

16

如果您在面向互联网的计算机上使用MSYS2的pacman首先下载文件,然后将pacman下载的文件传输到离线计算机,那么您就可以离线安装mingw-w64。

关于您的问题,pacman的好处是它会获取所有依赖项的正确版本。

在您的面向互联网的计算机上:

  1. http://www.msys2.org/下载并安装MSYS2安装程序

  2. 运行MSYS2,并使用pacman -Syu更新软件包数据库

  3. 在MSYS2终端中创建一个包含要安装的软件包(即mingw-w64)的文件夹

  4. pacman不会下载解决其所有依赖项的软件包。您需要创建一个临时空白数据库

mkdir ~/offline_packages
cd ~/offline_packages
mkdir database
pacman -Syw --cachedir . --dbpath database base base-devel mingw-w64-x86_64-toolchain 
使用 pacman 的 repo-add 脚本将所有内容打包成一个数据库:
repo-add ./offline.db.tar.gz ./*
  • 将 MSYS2 安装程序和 ~/offline_packages 文件夹复制到你的外部闪存驱动器中。

  • 在你的离线机器上:

    1. 安装 MSYS2。

    2. 将你的闪存驱动器中的 offline_packages 文件夹复制到 MSYS2 可以访问的路径下(例如:C:/msys64/home/user/offline_packages

    3. 编辑 C:/msys64/etc/pacman.conf

      1. 注释掉 [mingw32]、[mingw64]、[msys] 仓库。

      2. 添加一个新的仓库。该示例使用了上述任意路径。请根据你复制 offline_packages 文件夹的位置进行修改。

      [offline]
      SigLevel = Optional
      Server = file:///home/user/offline_packages
      
      在 MSYS2 终端中,使用您的新存储库同步 pacman 数据库。
    pacman -Syu
    
  • 安装mingw-w64等。

    pacman -S --needed base base-devel mingw-w64-x86_64-toolchain
    
  • 完成!

  • 参考: https://wiki.archlinux.org/index.php/Pacman/Tips_and_tricks#Installation_and_recovery


    当我写答案时,我的问题是我的唯一面向互联网的机器运行Linux。我觉得在这种情况下,一个(我认为)起源于*nix宇宙的软件包管理器可能更难在那里使用,即使对于这个奇怪的角落情况也是如此(但如果结果不是这样,那就令人印象深刻)。目前我有几台Win7面向互联网的虚拟机,这些提示对我来说肯定很有用。 - user180247
    1
    这个过程在Windows 7的Internet端和Windows 10的VDI端都非常顺利。我已经使用Cygwin很多年了,但有些事情Cygwin无法胜任,而MSYS64则是正确的解决方案。 - Nufosmatic
    “base”、“base-devel”、“mingw-w64-x86_64-toolchain”的宏包内容定义在哪里? - Nufosmatic
    @Nufosmatic:"base", "base-devel" 和 "mingw-w64-x86_64-toolchain" MSYS2 仓库都是 _groups_,因此它们在 MSYS2 groups page 上有定义。(相关的,对应的 Arch groups 在这里给出:"base" 和 "base-devel",在 Arch groups overview page 中)。 - AaronDanielson

    1

    @AaronDanielson的回答很好,但我稍作修改后就可以使用了。

    在第5步中,不要列出.sig文件或db文件夹,因为这会导致错误。相反,例如使用:

    repo-add ./offline.db.tar.gz $(ls -I "*.sig" | grep pkg)
    

    最好您把整个答案都发布出来,这样会更好。 - Rohit Gupta
    我请求有足够声望的人使用我的修改编辑AaronDanielson的答案。但是Eric Aya删除了我的回答的这一部分,我不知道为什么。请随意这样做,我相信编辑原始好答案比复制所有内容只进行微小调整更好。 - ThibaudP
    有一个编辑投票流程。而且我也已经投票(或将投票)让它保持原样。编辑是为了纠正错误,而不是改变其他人的回复或者修改你自己的回复。 - Rohit Gupta
    好的,我明白了,我会编辑我的答案。但是我认为这确实是对错误的更正,因为上面的答案描述的步骤对我来说不起作用。 - ThibaudP

    0

    不必只使用minGW-w64

    正如下载页面中所说的minGW-w64

    Mingw-w64项目的核心是头文件和支持库,用于在Windows上运行GCC的输出。由于Mingw-w64既不是GCC的主页也不是binutils的主页,因此提供了几组将它们结合起来的安装包。

    此外,源代码可用,但大多数人都希望直接获取二进制文件。

    MinGW

    此链接的github仓库中查看MinGW的发布版本。下载您需要的版本并将文件复制到C:\MinGW\中。

    w64devkit

    这个选项是另一个很好且更新的替代方案。在发布版本中选择您需要的版本。在Readme.md中还有安装指南。 从此链接下载您需要的版本。


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接