为什么这个 Mingw-w64 包这么大?

为什么这个 Mingw-w64 包这么大?

是否可以安装仅有的 x86_64-w64-mingw32-gcc?我需要它来执行一个命令,并且mingw-w64安装超过 800MB...我使用的是 Debian Buster,但对于我刚刚尝试过的其他 Linux 版本也是如此。

$ sudo apt-get install mingw-w64 -V --no-install-recommends
...
The following NEW packages will be installed:
   binutils-mingw-w64-i686 (2.31.1-11+8.3)
   binutils-mingw-w64-x86-64 (2.31.1-11+8.3)
   g++-mingw-w64 (8.3.0-6+21.3~deb10u1)
   g++-mingw-w64-i686 (8.3.0-6+21.3~deb10u1)
   g++-mingw-w64-x86-64 (8.3.0-6+21.3~deb10u1)
   gcc-mingw-w64 (8.3.0-6+21.3~deb10u1)
   gcc-mingw-w64-base (8.3.0-6+21.3~deb10u1)
   gcc-mingw-w64-i686 (8.3.0-6+21.3~deb10u1)
   gcc-mingw-w64-x86-64 (8.3.0-6+21.3~deb10u1)
   mingw-w64 (6.0.0-3)
   mingw-w64-common (6.0.0-3)
   mingw-w64-i686-dev (6.0.0-3)
   mingw-w64-x86-64-dev (6.0.0-3)
0 upgraded, 13 newly installed, 0 to remove and 2 not upgraded.
Need to get 137 MB of archives.
After this operation, 809 MB of additional disk space will be used.
Do you want to continue? [Y/n] 

答案1

为什么这个 Mingw-w64 包这么大?

因为mingw-w64是一个元包,为 MinGW-w64 工具链提供了针对所有受支持目标的 C 和 C++ 编译器。目前,这涉及四种不同的后端(32 位和 64 位,结合 POSIX 和 Windows 线程模型)。

如果您不需要所有这些,您可以要求apt仅安装您感兴趣的编译器,最终您将得到一组较小的软件包:

apt install gcc-mingw-w64-x86-64

这将安装 64 位工具链,不带g++.仍然是 300MiB 左右...

Debian 的下一版本(和 Ubuntu 20.04)提供更细的粒度,因此您只能指定其中一种线程模型:

apt install gcc-mingw-w64-x86-64-posix

答案2

是的,如果您不需要完整套件,您可以选择安装其中的特定部分。安装后将gcc-mingw-w64为您提供 C 所需的一切,但不包括对 C++ 的支持。这可能非常适合您。

如果您想引入更少的内容,则可以仅引入gcc-mingw-w64-x86-64以允许您仅针对 x86-64 架构进行编译。这将排除任何 i686 支持。如果您尝试仅在 Debian bullseye 及以上版本上使用 posix-threads 进行编译,您可以将其进一步隔离到gcc-mingw-w64-i686-posix.

请注意,即使您指定为gcc-mingw-w64-i686-posix,您仍然会得到*-runtime-base和包。binutils-**-dev

如果您的计划不是编译,而只是使用类似的东西/usr/bin/x86_64-w64-mingw32-elfedit,那么您可以简单地安装binutils-mingw-w64-x86-64。您可以使用它apt-file list <package>来查看每个包提供的文件。

Debian bullseye (11) 和 Ubuntu 20.04 上的依赖关系树如下所示:

mingw-w64
 |- gcc-mingw-w64
 |   |- gcc-mingw-w64-i686
 |   |   |- gcc-mingw-w64-i686-posix
 |   |   |   |- gcc-mingw-w64-i686-posix-runtime
 |   |   |   |- gcc-mingw-w64-base
 |   |   |   |- binutils-mingw-w64-i686
 |   |   |   `- mingw-w64-i686-dev
 |   |   `- gcc-mingw-w64-i686-win32
 |   |       |- gcc-mingw-w64-i686-win32-runtime
 |   |       |- gcc-mingw-w64-base
 |   |       |- binutils-mingw-w64-i686
 |   |       `- mingw-w64-i686-dev
 |   `- gcc-mingw-w64-x86-64
 |       |- gcc-mingw-w64-x86-64-posix
 |       |   |- gcc-mingw-w64-x86-64-posix-runtime
 |       |   |- gcc-mingw-w64-base
 |       |   |- binutils-mingw-w64-x86-64
 |       |   `- mingw-w64-x86-64-dev
 |       `- gcc-mingw-w64-x86-64-win32
 |           |- gcc-mingw-w64-x86-64-win32-runtime
 |           |- gcc-mingw-w64-base
 |           |- binutils-mingw-w64-x86-64
 |           `- mingw-w64-x86-64-dev
 `- g++-mingw-w64
     |- g++-mingw-w64-i686
     |   |- g++-mingw-w64-i686-posix
     |   |   |- gcc-mingw-w64-i686-posix
     |   |   |- gcc-mingw-w64-i686-posix-runtime
     |   |   `- gcc-mingw-w64-base
     |   `- g++-mingw-w64-i686-win32
     |       |- gcc-mingw-w64-i686-win32
     |       |- gcc-mingw-w64-i686-win32-runtime
     |       `- gcc-mingw-w64-base
     `- g++-mingw-w64-x86-64
         |- g++-mingw-w64-x86-64-posix
         |   |- gcc-mingw-w64-x86-64-posix
         |   |- gcc-mingw-w64-x86-64-posix-runtime
         |   `- gcc-mingw-w64-base
         `- g++-mingw-w64-x86-64-win32
             |- gcc-mingw-w64-x86-64-win32
             |- gcc-mingw-w64-x86-64-win32-runtime
             `- gcc-mingw-w64-base

奖励:mingw 的维护者经常访问这个网站。也许你会从他那里得到更好的答案。

答案3

apt download x86_64-w64-mingw32-gcc
dpkg-deb -R x86_64-w64-mingw32-gcc*deb temp
cp temp/your/required/file /tmp/file
rm -rf x86_64-w64-mingw32-gcc*

相关内容