MSYS (Minimal SYStem) は、Windows 上で動作する軽量の UNIX 風シェル環境です。 Unix シェル Bash やテキスト操作ユーティリティ (gawk , sed , findutils)、ソースコードパッチ用ツール (diffutils)、アーカイブツール (tar , bzip2 , zlib ) を統合したパッケージで、GNU ツールチェーン の Windows 移植版 (32bit) である MinGW を補う目的で作られました。
MSYS2 は 2013 年後半に新しく始まった MSYS とは別の独立したプロジェクトで、32/64bit 向けの MinGW-w64 パッケージを利用できます。
OUTLINE
MSYS2 の導入
Windows 10 に MSYS2 をインストールして GCC の開発環境および GTK+ (GObject) を利用して python で GUI アプリを開発できる環境を構築します。
MSYS2 とは
GNU Compiler Collection (GCC) による開発環境を Windows 上で利用するためのシステムで有名なものに Cygwin (1995 年〜)があります。
Cygwin は POSIX に準拠するシステムコールを実現するために cygwin1.dll というランタイムライブラリを提供しており、Cygwin 上の GCC でビルドしたアプリケーションを実行には、このランタイムライブラリが必要になります。
cygwin1.dll に依存せず、Windows ネイティブなランタイムライブラリ msvcrt.dll を利用するようにした開発環境が MinGW で、そのシェル環境が MSYS と呼ばれています。このプロジェクトは 20 年以上前の 1998 年に始まっており、32bit の Windows をサポートしています。
その後、MinGW プロジェクトが 64bit 向けの開発へ移行しなかったため、64bit 向けのプロジェクト MinGW-w64 が新たに立ち上がりました(2005 年〜)。
一方、開発の進捗が遅い MSYS に対して、Cygwin をベースに新たに書き直した MSYS2 プロジェクトが立ち上がり、MinGW-w64 の GCC (32/64bit) をサポートするようになりました(2013 年〜)。
MSYS2 の特徴
MSYS2 は Arch Linux のために開発された Pacman というパッケージ管理システムを採用しています。Pacman は、パッケージのインストール・アップグレード・削除・ダウングレードを処理するとともに依存関係の自動解決を行います。MSYS2 をインストール、設定する際に、その便利さを紹介します。
MSYS2 のインストール
まず、参考サイト [1] からインストーラ(この例では 64bit の msys2-x86_64-20190524.exe )をダウンロードします。
インストール先を D:\msys64 にしてインストールした例を以下に示しました。インストール先は Windows 10 HOME edition(日本語版)です。
(「□ 今すぐ MSYS 64bit を実行します。」にチェックが入っていれば)完了 (F) ボタンをクリックしてインストーラを終了すると端末エミュレータ (Mintty) が起動します。
MSYS2 の端末エミュレータ (Mintty)
MSYS2 のアップデート
pacman -Syu でローカルパッケージデータベースの更新と、(更新可能な)パッケージを更新します。
bitwa@WIN-7713IMJPI09 MSYS ~
$ pacman -Syu
:: パッケージデータベースの同期中...
mingw32 451.1 KiB 964K/s 00:00 [#####################] 100%
mingw32.sig 119.0 B 0.00B/s 00:00 [#####################] 100%
mingw64 453.4 KiB 1378K/s 00:00 [#####################] 100%
mingw64.sig 119.0 B 0.00B/s 00:00 [#####################] 100%
msys 190.9 KiB 1224K/s 00:00 [#####################] 100%
msys.sig 119.0 B 0.00B/s 00:00 [#####################] 100%
:: Starting core system upgrade...
警告: terminate other MSYS2 programs before proceeding
依存関係を解決しています...
衝突するパッケージがないか確認しています...
パッケージ (3) mintty-1~3.0.6-1 msys2-runtime-3.0.7-6 pacman-5.2.1-4
合計ダウンロード容量: 14.12 MiB
合計インストール容量: 52.11 MiB
最終的なアップグレード容量: -7.89 MiB
:: インストールを行いますか? [Y/n] y
:: パッケージを取得します...
msys2-runtime-3.0.7... 2.6 MiB 2.49M/s 00:01 [#####################] 100%
mintty-1~3.0.6-1-x86_64 664.9 KiB 617K/s 00:01 [#####################] 100%
pacman-5.2.1-4-x86_64 10.9 MiB 2.41M/s 00:05 [#####################] 100%
(3/3) キーリングのキーを確認 [#####################] 100%
(3/3) パッケージの整合性をチェック [#####################] 100%
(3/3) パッケージファイルのロード [#####################] 100%
(3/3) ファイルの衝突をチェック [#####################] 100%
(3/3) 空き容量を確認 [#####################] 100%
:: パッケージの変更を処理しています...
(1/3) 更新 msys2-runtime [#####################] 100%
(2/3) 更新 mintty [#####################] 100%
(3/3) 更新 pacman [#####################] 100%
警告: terminate MSYS2 without returning to shell and check for updates again
警告: for example close your terminal window instead of calling exit
コアのパッケージを更新したからでしょうか、シェルがここで止まってしまったので、「警告」に従って端末エミュレータ右上の X をクリックして終了します。
スタートメニューから「MSYS 64bit」→「MSYS2 MSYS」を選択して端末エミュレータを起動します。pacman -Su で残りのパッケージを更新します。
bitwa@WIN-7713IMJPI09 MSYS ~
$ pacman -Su
:: コアシステムの更新を開始...
何も行うことがありません
:: システム全体の更新を開始...
依存関係を解決しています...
衝突するパッケージがないか確認しています...
パッケージ (45) bash-completion-2.10-1 brotli-1.0.7-2 bsdcpio-3.4.0-4
bsdtar-3.4.0-4 bzip2-1.0.8-1 ca-certificates-20190110-1
curl-7.67.0-1 dtc-1.5.1-1 findutils-4.7.0-1 gawk-5.0.1-1
gcc-libs-9.1.0-2 gnupg-2.2.19-1 heimdal-libs-7.7.0-1
less-551-1 libarchive-3.4.0-4 libbz2-1.0.8-1
libcurl-7.67.0-1 libedit-20191025_3.1-1 libexpat-2.2.9-1
libgcrypt-1.8.5-1 libgnutls-3.6.11.1-1 libgpgme-1.13.1-1
libhogweed-3.5.1-1 libiconv-1.16-1 libidn2-2.2.0-1
liblz4-1.9.2-1 libnettle-3.5.1-1 libnghttp2-1.39.2-1
libopenssl-1.1.1.d-1 libp11-kit-0.23.18.1-1
libpcre2_8-10.34-1 libpsl-0.21.0-1 libreadline-8.0.001-1
libssh2-1.9.0-1 libtasn1-4.15.0-1 libutil-linux-2.34-1
libxml2-2.9.10-1 libxslt-1.1.34-1 libzstd-1.4.4-1
ncurses-6.1.20190615-1 nettle-3.5.1-1 openssl-1.1.1.d-1
p11-kit-0.23.18.1-1 pkgfile-21-1 util-linux-2.34-1
合計ダウンロード容量: 22.82 MiB
合計インストール容量: 129.84 MiB
最終的なアップグレード容量: 5.14 MiB
:: インストールを行いますか? [Y/n] y
:: パッケージを取得します...
bash-completion-... 211.6 KiB 676 KiB/s 00:00 [#####################] 100%
gcc-libs-9.1.0-2... 1183.6 KiB 2.39 MiB/s 00:00 [#####################] 100%
brotli-1.0.7-2-x... 284.8 KiB 8.97 MiB/s 00:00 [#####################] 100%
...
(省略)
...
libutil-linux-2.... 254.7 KiB 1481 KiB/s 00:00 [#####################] 100%
pkgfile-21-1-x86_64 43.0 KiB 0.00 B/s 00:00 [#####################] 100%
util-linux-2.34-... 1450.1 KiB 2.16 MiB/s 00:01 [#####################] 100%
(45/45) キーリングのキーを確認 [#####################] 100%
(45/45) パッケージの整合性をチェック [#####################] 100%
(45/45) パッケージファイルのロード [#####################] 100%
(45/45) ファイルの衝突をチェック [#####################] 100%
(45/45) 空き容量を確認 [#####################] 100%
:: パッケージの変更を処理しています...
( 1/45) 更新 bash-completion [#####################] 100%
( 2/45) 更新 gcc-libs [#####################] 100%
( 3/45) 更新 brotli [#####################] 100%
...
(省略)
...
(39/45) 更新 gnupg [#####################] 100%
==> msys2.gpg からキーを追加...
==> キーリングの信頼されたキーに署名...
-> キーに署名 D55E7A6D7CE9BA1587C0ACACF40D263ECA25678A...
-> キーに署名 123D4D51A1793859C2BE916BBBE514E53E0D0813...
-> キーに署名 B91BCF3303284BF90CC043CA9F418C233E652008...
-> キーに署名 9DD0D4217D75A33B896159E6DA7EF2ABAEEA755C...
==> 所有者信頼値をインポート...
==> 信用データベースを更新...
gpg: 信用データベースの検査は、不要です
(40/45) 更新 libarchive [#####################] 100%
(41/45) 更新 libgpgme [#####################] 100%
(42/45) 更新 libpcre2_8 [#####################] 100%
(43/45) 更新 libutil-linux [#####################] 100%
(44/45) 更新 pkgfile [#####################] 100%
(45/45) 更新 util-linux [#####################] 100%
bitwa@WIN-7713IMJPI09 MSYS ~
$
git のインストール
MSYS2 の更新ができましたので、pacman -S git で git をインストールしておきます。
bitwa@WIN-7713IMJPI09 MINGW64 ~
$ pacman -S git
依存関係を解決しています...
衝突するパッケージがないか確認しています...
パッケージ (35) db-5.3.28-2 expat-2.2.9-1 gdbm-1.18.1-2 heimdal-7.7.0-1
libgdbm-1.18.1-2 openssh-8.1p1-1 perl-5.30.1-1
perl-Authen-SASL-2.16-2 perl-Convert-BinHex-1.125-1
perl-Encode-Locale-1.05-1 perl-Error-0.17028-1
perl-File-Listing-6.04-2 perl-HTML-Parser-3.72-4
perl-HTML-Tagset-3.20-2 perl-HTTP-Cookies-6.08-1
perl-HTTP-Daemon-6.01-2 perl-HTTP-Date-6.05-1
perl-HTTP-Message-6.18-1 perl-HTTP-Negotiate-6.01-2
perl-IO-Socket-SSL-2.066-1 perl-IO-stringy-2.111-1
perl-LWP-MediaTypes-6.02-2 perl-MIME-tools-5.509-1
perl-MailTools-2.21-1 perl-Net-HTTP-6.19-1
perl-Net-SMTP-SSL-1.04-1 perl-Net-SSLeay-1.85-3
perl-TermReadKey-2.37-4 perl-TimeDate-2.30-2
perl-Try-Tiny-0.30-1 perl-URI-1.76-1
perl-WWW-RobotRules-6.02-2 perl-libwww-6.43-1 vim-8.1.2292-1
git-2.24.1-1
合計ダウンロード容量: 28.85 MiB
合計インストール容量: 139.19 MiB
:: インストールを行いますか? [Y/n] y
:: パッケージを取得します...
expat-2.2.9-1-x86_64 43.7 KiB 0.00 B/s 00:00 [#####################] 100%
vim-8.1.2292-1-x... 7.0 MiB 2.04 MiB/s 00:03 [#####################] 100%
heimdal-7.7.0-1-... 430.4 KiB 1312 KiB/s 00:00 [#####################] 100%
...
(省略)
...
git-2.24.1-1-x86_64 5.2 MiB 3.14 MiB/s 00:02 [#####################] 100%
(35/35) キーリングのキーを確認 [#####################] 100%
(35/35) パッケージの整合性をチェック [#####################] 100%
(35/35) パッケージファイルのロード [#####################] 100%
(35/35) ファイルの衝突をチェック [#####################] 100%
(35/35) 空き容量を確認 [#####################] 100%
:: パッケージの変更を処理しています...
( 1/35) インストール expat [#####################] 100%
( 2/35) インストール vim [#####################] 100%
( 3/35) インストール heimdal [#####################] 100%
...
(省略)
...
(25/35) インストール perl-libwww [#####################] 100%
perl-libwww の提案パッケージ
perl-LWP-Protocol-https: for https:// url schemes
(26/35) インストール perl-TimeDate [#####################] 100%
(27/35) インストール perl-MailTools [#####################] 100%
(28/35) インストール perl-IO-stringy [#####################] 100%
(29/35) インストール perl-Convert-BinHex [#####################] 100%
module test... pass.
(30/35) インストール perl-MIME-tools [#####################] 100%
(31/35) インストール perl-Net-SSLeay [#####################] 100%
(32/35) インストール perl-IO-Socket-SSL [#####################] 100%
(33/35) インストール perl-Net-SMTP-SSL [#####################] 100%
(34/35) インストール perl-TermReadKey [#####################] 100%
(35/35) インストール git [#####################] 100%
git の提案パッケージ
python2: various helper scripts
subversion: git svn
bitwa@WIN-7713IMJPI09 MINGW64 ~
$
三種類の端末エミュレータ
インストールした MSYS2 では、スタートメニューに、MinGW 32bit, MinGW 64bit そして MSYS の三種類の端末エミュレータが登録されていて、どれを使うべきなのか戸惑います。
どれも Mintty で bash シェルを利用できますが、パスが微妙に異なっています。また env で確認すると、PATH 以外にも CONFIG_SITE, MSYSTEM_CHOST などの環境変数の値も異なっていることを確認できます。
ここでは 64bit の GCC を利用するので、以降、MSYS2 MinGW 64-bit(実体は D:\msys64\msys2_shell.cmd -mingw64 という引数付きバッチファイルです)を利用することにします。
参考までに、それぞれの端末エミュレータでパスを確認した結果を示しました。
MSYS2 MinGW 32-bit
bitwa@WIN-7713IMJPI09 MINGW32 ~
$ echo $PATH
/mingw32/bin: /usr/local/bin:/usr/bin:/bin:/c/Windows/System32:/c/Windows:/c/Windows/System32/Wbem:/c/Windows/System32/WindowsPowerShell/v1.0/:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl
bitwa@WIN-7713IMJPI09 MINGW32 ~
$
MSYS2 MinGW 64-bit
bitwa@WIN-7713IMJPI09 MINGW64 ~
$ echo $PATH
/mingw64/bin: /usr/local/bin:/usr/bin:/bin:/c/Windows/System32:/c/Windows:/c/Windows/System32/Wbem:/c/Windows/System32/WindowsPowerShell/v1.0/:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl
bitwa@WIN-7713IMJPI09 MINGW64 ~
$
MSYS2 MSYS
bitwa@WIN-7713IMJPI09 MSYS ~
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/opt/bin: /c/Windows/System32:/c/Windows:/c/Windows/System32/Wbem:/c/Windows/System32/WindowsPowerShell/v1.0/:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl
bitwa@WIN-7713IMJPI09 MSYS ~
$
GCC (64bit) のインストール
GCC の開発環境をインストールします。ただし、GCC でアプリをビルドする目的で MSYS2 を利用しない場合はインストールを省略できます。
まず、pacman -Sg でパッケージグループを表示します。
bitwa@WIN-7713IMJPI09 MINGW64 ~
$ pacman -Sg
kf5
mingw-w64-i686-toolchain
mingw-w64-i686
mingw-w64-i686-gimp-plugins
kde-applications
kdebase
mingw-w64-i686-qt
mingw-w64-i686-qt5
mingw-w64-i686-qt-static
mingw-w64-i686-qt5-static
mingw-w64-i686-vulkan-devel
tesseract-data
mingw-w64-x86_64-toolchain
mingw-w64-x86_64
mingw-w64-x86_64-gimp-plugins
mingw-w64-x86_64-qt
mingw-w64-x86_64-qt5
mingw-w64-x86_64-qt-static
mingw-w64-x86_64-qt5-static
mingw-w64-x86_64-vulkan-devel
libraries
development
base-devel
base
msys2-devel
compression
VCS
sys-utils
Database
net-utils
editors
python-modules
mingw-w64-cross-toolchain
mingw-w64-cross
perl-modules
utilities
bitwa@WIN-7713IMJPI09 MINGW64 ~
$
上記から mingw-w64-x86_64-toolchain を選んで 64bit 対応の GCC 関連パッケージをまとめてインストールします。
bitwa@WIN-7713IMJPI09 MINGW64 ~
$ pacman -S mingw-w64-x86_64-toolchain
:: 17 個のパッケージがグループ mingw-w64-x86_64-toolchain に存在します:
:: リポジトリ mingw64
1) mingw-w64-x86_64-binutils 2) mingw-w64-x86_64-crt-git
3) mingw-w64-x86_64-gcc 4) mingw-w64-x86_64-gcc-ada
5) mingw-w64-x86_64-gcc-fortran 6) mingw-w64-x86_64-gcc-libgfortran
7) mingw-w64-x86_64-gcc-libs 8) mingw-w64-x86_64-gcc-objc
9) mingw-w64-x86_64-gdb 10) mingw-w64-x86_64-headers-git
11) mingw-w64-x86_64-libmangle-git 12) mingw-w64-x86_64-libwinpthread-git
13) mingw-w64-x86_64-make 14) mingw-w64-x86_64-pkg-config
15) mingw-w64-x86_64-tools-git 16) mingw-w64-x86_64-winpthreads-git
17) mingw-w64-x86_64-winstorecompat-git
選択して下さい (デフォルト=all):
依存関係を解決しています...
衝突するパッケージがないか確認しています...
パッケージ (43) mingw-w64-x86_64-bzip2-1.0.8-1
mingw-w64-x86_64-ca-certificates-20190110-1
mingw-w64-x86_64-expat-2.2.9-1
mingw-w64-x86_64-gettext-0.19.8.1-8
mingw-w64-x86_64-gmp-6.1.2-1 mingw-w64-x86_64-isl-0.22-1
mingw-w64-x86_64-libffi-3.2.1-4
mingw-w64-x86_64-libiconv-1.16-1
mingw-w64-x86_64-libsystre-1.0.1-4
mingw-w64-x86_64-libtasn1-4.15.0-1
mingw-w64-x86_64-libtre-git-r128.6fb7206-2
mingw-w64-x86_64-mpc-1.1.0-1
mingw-w64-x86_64-mpdecimal-2.4.2-1
mingw-w64-x86_64-mpfr-4.0.2-2
mingw-w64-x86_64-ncurses-6.1.20190630-1
mingw-w64-x86_64-openssl-1.1.1.d-1
mingw-w64-x86_64-p11-kit-0.23.18.1-1
mingw-w64-x86_64-python-3.8.1-1
mingw-w64-x86_64-readline-8.0.001-2
mingw-w64-x86_64-sqlite3-3.30.1-1
mingw-w64-x86_64-tcl-8.6.10-1 mingw-w64-x86_64-termcap-1.3.1-5
mingw-w64-x86_64-tk-8.6.10-1
mingw-w64-x86_64-windows-default-manifest-6.4-3
mingw-w64-x86_64-xz-5.2.4-1 mingw-w64-x86_64-zlib-1.2.11-7
mingw-w64-x86_64-binutils-2.33.1-1
mingw-w64-x86_64-crt-git-8.0.0.5576.34082b63-1
mingw-w64-x86_64-gcc-9.2.0-2 mingw-w64-x86_64-gcc-ada-9.2.0-2
mingw-w64-x86_64-gcc-fortran-9.2.0-2
mingw-w64-x86_64-gcc-libgfortran-9.2.0-2
mingw-w64-x86_64-gcc-libs-9.2.0-2
mingw-w64-x86_64-gcc-objc-9.2.0-2 mingw-w64-x86_64-gdb-8.3.1-3
mingw-w64-x86_64-headers-git-8.0.0.5576.34082b63-1
mingw-w64-x86_64-libmangle-git-8.0.0.5573.a4de8df4-1
mingw-w64-x86_64-libwinpthread-git-8.0.0.5574.33e5a2ac-1
mingw-w64-x86_64-make-4.2.1-4
mingw-w64-x86_64-pkg-config-0.29.2-1
mingw-w64-x86_64-tools-git-8.0.0.5573.a4de8df4-1
mingw-w64-x86_64-winpthreads-git-8.0.0.5574.33e5a2ac-1
mingw-w64-x86_64-winstorecompat-git-8.0.0.5573.a4de8df4-1
合計ダウンロード容量: 146.49 MiB
合計インストール容量: 910.72 MiB
:: インストールを行いますか? [Y/n] y
:: パッケージを取得します...
mingw-w64-x86_64... 623.0 KiB 950 KiB/s 00:01 [#####################] 100%
mingw-w64-x86_64... 102.1 KiB 6.65 MiB/s 00:00 [#####################] 100%
mingw-w64-x86_64... 13.6 MiB 2.94 MiB/s 00:05 [#####################] 100%
...
(省略)
...
mingw-w64-x86_64... 35.9 KiB 0.00 B/s 00:00 [#####################] 100%
(43/43) キーリングのキーを確認 [#####################] 100%
(43/43) パッケージの整合性をチェック [#####################] 100%
(43/43) パッケージファイルのロード [#####################] 100%
(43/43) ファイルの衝突をチェック [#####################] 100%
(43/43) 空き容量を確認 [#####################] 100%
:: パッケージの変更を処理しています...
( 1/43) インストール mingw-w64-x86_64-libiconv [#####################] 100%
( 2/43) インストール mingw-w64-x86_64-zlib [#####################] 100%
( 3/43) インストール mingw-w64-x86_64-binutils [#####################] 100%
...
(省略)
...
(43/43) インストール mingw-w64-x86_64-winstore... [#####################] 100%
bitwa@WIN-7713IMJPI09 MINGW64 ~
$
Hello World!
GCC がインストールできましたので、念の為、簡単な Hello World! の GUI プログラムをコンパイルしてみました。なお、下記ソースは日本語版 Windows デフォルトのエンコーディングである cp932 (Shift-JIS) で保存しておきます。
hello.c (cp932)
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR pCmdLine, int showCmd)
{
MessageBox(NULL, "こんにちは、世界!", "こんにちは、世界!", MB_OK);
return 0;
}
-v オプションを付けてコンパイル時の処理も出力しました。
bitwa@WIN-7713IMJPI09 MINGW64 ~/hello
$ gcc -o hello.exe hello.c -mwindows -v
Using built-in specs.
COLLECT_GCC=D:\msys64\mingw64\bin\gcc.exe
COLLECT_LTO_WRAPPER=D:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/lto-wrapper.exe
Target: x86_64-w64-mingw32
Configured with: ../gcc-9.2.0/configure --prefix=/mingw64 --with-local-prefix=/mingw64/local --build=x86_64-w64-mingw32 --host=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --with-native-system-header-dir=/mingw64/x86_64-w64-mingw32/include --libexecdir=/mingw64/lib --enable-bootstrap --with-arch=x86-64 --with-tune=generic --enable-languages=c,lto,c++,fortran,ada,objc,obj-c++ --enable-shared --enable-static --enable-libatomic --enable-threads=posix --enable-graphite --enable-fully-dynamic-string --enable-libstdcxx-filesystem-ts=yes --enable-libstdcxx-time=yes --disable-libstdcxx-pch --disable-libstdcxx-debug --disable-isl-version-check --enable-lto --enable-libgomp --disable-multilib --enable-checking=release --disable-rpath --disable-win32-registry --disable-nls --disable-werror --disable-symvers --enable-plugin --with-libiconv --with-system-zlib --with-gmp=/mingw64 --with-mpfr=/mingw64 --with-mpc=/mingw64 --with-isl=/mingw64 --with-pkgversion='Rev2, Built by MSYS2 project' --with-bugurl=https://sourceforge.net/projects/msys2 --with-gnu-as --with-gnu-ld
Thread model: posix
gcc version 9.2.0 (Rev2, Built by MSYS2 project)
COLLECT_GCC_OPTIONS='-o' 'hello.exe' '-mwindows' '-v' '-mtune=generic' '-march=x86-64'
D:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/cc1.exe -quiet -v -iprefix D:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/ -D_REENTRANT hello.c -quiet -dumpbase hello.c -mwindows -mtune=generic -march=x86-64 -auxbase hello -version -o D:\msys64\tmp\ccoorSFx.s
GNU C17 (Rev2, Built by MSYS2 project) version 9.2.0 (x86_64-w64-mingw32)
compiled by GNU C version 9.2.0, GMP version 6.1.2, MPFR version 4.0.2, MPC version 1.1.0, isl version isl-0.21-GMP
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
ignoring duplicate directory "D:/msys64/mingw64/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/9.2.0/include"
ignoring nonexistent directory "C:/building/msys64/mingw64/include"
ignoring nonexistent directory "/mingw64/include"
ignoring duplicate directory "D:/msys64/mingw64/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/9.2.0/include-fixed"
ignoring duplicate directory "D:/msys64/mingw64/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/9.2.0/../../../../x86_64-w64-mingw32/include"
ignoring nonexistent directory "C:/building/msys64/mingw64/x86_64-w64-mingw32/include"
#include "..." search starts here:
#include <...> search starts here:
D:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/include
D:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/../../../../include
D:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/include-fixed
D:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/../../../../x86_64-w64-mingw32/include
End of search list.
GNU C17 (Rev2, Built by MSYS2 project) version 9.2.0 (x86_64-w64-mingw32)
compiled by GNU C version 9.2.0, GMP version 6.1.2, MPFR version 4.0.2, MPC version 1.1.0, isl version isl-0.21-GMP
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: 3bcdf03344e3ad7cb057c2ec82f696e6
COLLECT_GCC_OPTIONS='-o' 'hello.exe' '-mwindows' '-v' '-mtune=generic' '-march=x86-64'
D:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/../../../../x86_64-w64-mingw32/bin/as.exe -v -o D:\msys64\tmp\ccOkl3s7.o D:\msys64\tmp\ccoorSFx.s
GNU assembler version 2.33.1 (x86_64-w64-mingw32) using BFD version (GNU Binutils) 2.33.1
COMPILER_PATH=D:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/;D:/msys64/mingw64/bin/../lib/gcc/;D:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/../../../../x86_64-w64-mingw32/bin/
LIBRARY_PATH=D:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/;D:/msys64/mingw64/bin/../lib/gcc/;D:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/../../../../x86_64-w64-mingw32/lib/../lib/;D:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/../../../../lib/;D:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/../../../../x86_64-w64-mingw32/lib/;D:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/../../../
COLLECT_GCC_OPTIONS='-o' 'hello.exe' '-mwindows' '-v' '-mtune=generic' '-march=x86-64'
D:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/collect2.exe -plugin D:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/liblto_plugin-0.dll -plugin-opt=D:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/lto-wrapper.exe -plugin-opt=-fresolution=D:\msys64\tmp\cc6QBLmS.res -plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_eh -plugin-opt=-pass-through=-lmoldname -plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt -plugin-opt=-pass-through=-lpthread -plugin-opt=-pass-through=-lgdi32 -plugin-opt=-pass-through=-lcomdlg32 -plugin-opt=-pass-through=-ladvapi32 -plugin-opt=-pass-through=-lshell32 -plugin-opt=-pass-through=-luser32 -plugin-opt=-pass-through=-lkernel32 -plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_eh -plugin-opt=-pass-through=-lmoldname -plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt -m i386pep --subsystem windows -Bdynamic -o hello.exe D:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/../../../../x86_64-w64-mingw32/lib/../lib/crt2.o D:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/crtbegin.o -LD:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0 -LD:/msys64/mingw64/bin/../lib/gcc -LD:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/../../../../x86_64-w64-mingw32/lib/../lib -LD:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/../../../../lib -LD:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/../../../../x86_64-w64-mingw32/lib -LD:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/../../.. D:\msys64\tmp\ccOkl3s7.o -lmingw32 -lgcc -lgcc_eh -lmoldname -lmingwex -lmsvcrt -lpthread -lgdi32 -lcomdlg32 -ladvapi32 -lshell32 -luser32 -lkernel32 -lmingw32 -lgcc -lgcc_eh -lmoldname -lmingwex -lmsvcrt D:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/../../../../x86_64-w64-mingw32/lib/../lib/default-manifest.o D:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/crtend.o
COLLECT_GCC_OPTIONS='-o' 'hello.exe' '-mwindows' '-v' '-mtune=generic' '-march=x86-64'
bitwa@WIN-7713IMJPI09 MINGW64 ~/hello
$
hello.exe の実行例
PyGObject のインストール
python で GTK+ の GUI プログラミングをするために必要なパッケージをインストールします。参考サイト [7] に従って、下記のようにインストールします。
bitwa@WIN-7713IMJPI09 MINGW64 ~
$ pacman -S mingw-w64-x86_64-gtk3 mingw-w64-x86_64-python3 mingw-w64-x86_64-python3-gobject
警告: mingw-w64-x86_64-python-3.8.1-1 は最新です -- 再インストール
依存関係を解決しています...
衝突するパッケージがないか確認しています...
警告: 循環依存が検出されました:
警告: mingw-w64-x86_64-harfbuzz は依存パッケージ mingw-w64-x86_64-freetype の前にインストールされます
パッケージ (36) mingw-w64-x86_64-adwaita-icon-theme-3.34.3-1
mingw-w64-x86_64-atk-2.34.1-1 mingw-w64-x86_64-cairo-1.16.0-1
mingw-w64-x86_64-fontconfig-2.13.1-1
mingw-w64-x86_64-freeglut-3.2.1-1
mingw-w64-x86_64-freetype-2.10.1-1
mingw-w64-x86_64-fribidi-1.0.8-1
mingw-w64-x86_64-gdk-pixbuf2-2.40.0-1
mingw-w64-x86_64-glib2-2.62.4-1
mingw-w64-x86_64-gobject-introspection-runtime-1.62.0-2
mingw-w64-x86_64-graphite2-1.3.13-2
mingw-w64-x86_64-harfbuzz-2.6.4-3
mingw-w64-x86_64-hicolor-icon-theme-0.17-1
mingw-w64-x86_64-jasper-2.0.16-1
mingw-w64-x86_64-json-glib-1.4.4-1
mingw-w64-x86_64-libcroco-0.6.13-1
mingw-w64-x86_64-libdatrie-0.2.12-1
mingw-w64-x86_64-libepoxy-1.5.4-1
mingw-w64-x86_64-libjpeg-turbo-2.0.4-1
mingw-w64-x86_64-libpng-1.6.37-3
mingw-w64-x86_64-librsvg-2.46.4-1
mingw-w64-x86_64-libthai-0.1.28-2
mingw-w64-x86_64-libtiff-4.1.0-1
mingw-w64-x86_64-libxml2-2.9.10-2 mingw-w64-x86_64-lzo2-2.10-1
mingw-w64-x86_64-pango-1.43.0-3 mingw-w64-x86_64-pcre-8.43-1
mingw-w64-x86_64-pixman-0.38.4-1
mingw-w64-x86_64-pygobject-devel-3.34.0-3
mingw-w64-x86_64-python-cairo-1.18.2-2
mingw-w64-x86_64-shared-mime-info-1.15-1
mingw-w64-x86_64-wineditline-2.205-3
mingw-w64-x86_64-zstd-1.4.4-1 mingw-w64-x86_64-gtk3-3.24.13-1
mingw-w64-x86_64-python-3.8.1-1
mingw-w64-x86_64-python-gobject-3.34.0-3
合計ダウンロード容量: 38.11 MiB
合計インストール容量: 328.42 MiB
最終的なアップグレード容量: 215.75 MiB
:: インストールを行いますか? [Y/n] y
:: パッケージを取得します...
mingw-w64-x86_64... 31.5 KiB 0.00 B/s 00:00 [#####################] 100%
mingw-w64-x86_64... 58.2 KiB 0.00 B/s 00:00 [#####################] 100%
mingw-w64-x86_64... 885.1 KiB 1112 KiB/s 00:01 [#####################] 100%
...
(省略)
...
mingw-w64-x86_64... 188.6 KiB 5.94 MiB/s 00:00 [#####################] 100%
(36/36) キーリングのキーを確認 [#####################] 100%
(36/36) パッケージの整合性をチェック [#####################] 100%
(36/36) パッケージファイルのロード [#####################] 100%
(36/36) ファイルの衝突をチェック [#####################] 100%
(36/36) 空き容量を確認 [#####################] 100%
:: パッケージの変更を処理しています...
( 1/36) インストール mingw-w64-x86_64-hicolor-... [#####################] 100%
( 2/36) インストール mingw-w64-x86_64-wineditline [#####################] 100%
( 3/36) インストール mingw-w64-x86_64-pcre [#####################] 100%
...
(省略)
...
(36/36) インストール mingw-w64-x86_64-python-g... [#####################] 100%
bitwa@WIN-7713IMJPI09 MINGW64 ~
$
calculator.py の実行
本ブログで以前紹介した PyGObject のサンプルプログラム [8] を git でクローンします。サンプルの中から calculator.py を実行してみます。
bitwa@WIN-7713IMJPI09 MINGW64 ~
$ git clone https://github.com/bitwalk123/PyGObject_samples.git
Cloning into 'PyGObject_samples'...
remote: Enumerating objects: 141, done.
remote: Counting objects: 100% (141/141), done.
remote: Compressing objects: 100% (93/93), done.
remote: Total 141 (delta 85), reused 99 (delta 46), pack-reused 0
Receiving objects: 100% (141/141), 24.68 KiB | 283.00 KiB/s, done.
Resolving deltas: 100% (85/85), done.
bitwa@WIN-7713IMJPI09 MINGW64 ~
$ ls
PyGObject_samples
bitwa@WIN-7713IMJPI09 MINGW64 ~
$ cd PyGObject_samples
bitwa@WIN-7713IMJPI09 MINGW64 ~/PyGObject_samples
$ ls
calculator.py gtk_grid.py gtk_notebook.py gtk_textview.py
gtk_button.py gtk_hbox.py gtk_progressbar.py gtk_togglebutton.py
gtk_checkbutton.py gtk_headerbar.py gtk_radiobutton.py gtk_vbox.py
gtk_combobox.py gtk_iconview.py gtk_spinbutton.py hello.py
gtk_dialog.py gtk_label.py gtk_spinner.py hello2.py
gtk_entry.py gtk_linkbutton.py gtk_switch.py README.md
bitwa@WIN-7713IMJPI09 MINGW64 ~/PyGObject_samples
$ python -V
Python 3.8.1
bitwa@WIN-7713IMJPI09 MINGW64 ~/PyGObject_samples
$ python calculator.py
calculator.py の実行例
このスクリプトは Linux 上で開発したので、文字は UTF-8 でエンコードされてます。アプリがコンソール(端末エミュレータ)に文字列を出力せず、GUI だけを使用している場合は、文字化けの問題はなさそうです。しかし、Windows と Linux とエンコードが違う以上、文字化けの問題が出てくるだろうと考えられます。詳しく調べて、別の機会に対処方法などを紹介したいと考えています。
参考サイト
MSYS2 homepage
Mintty — Cygwin Terminal emulator
MSYS2で快適なターミナル生活 - Qiita [2016-04-28]
Pacmanの使い方 - Qiita [2016-07-30]
Pacman/Rosetta - ArchWiki
Repo Updates - MSYS2 Packages
Getting Started — PyGObject
bitWalk's: PyGObject を試す (2) 〜 電卓エミュレータ [2020-01-12]
VIDEO
にほんブログ村