2022/08/23(火) [n年前の日記]
#1 [prog][windows] Windows10にMinGWをインストールし直した
Windows10 x64 21H2上で、MinGW + msys (msys2 + MinGW-w64に非ず)を再インストールしてみた。インストール直後の状態で、スクリーンセーバをビルドできるのかどうかが気になったので…。
MinGW (MinGW が正しい表記らしい) + msys というのは、Windows上で、CコンパイラやC++コンパイラを使えるようにしてくれるツール群、という説明で合っているのだろうか。とにかく、コイツをインストールすれば、gcc という有名なCコンパイラが無料で使えるようになる。
_MinGW - Wikipedia
MinGW は32bit版プログラムの生成しか対応してないので、今時は msys2 + MinGW-w64 という、64bit対応の環境が使われることが多いのだけど。スクリーンセーバの作成をしたいとなると、MinGW-w64 はそのへん対応してないので、MinGW を使うしかなく。 *1
さておき。せっかくなので、2022/08時点でのインストール手順をメモ。そのうち自分も手順を絶対に忘れそうなので…。
MinGW (MinGW が正しい表記らしい) + msys というのは、Windows上で、CコンパイラやC++コンパイラを使えるようにしてくれるツール群、という説明で合っているのだろうか。とにかく、コイツをインストールすれば、gcc という有名なCコンパイラが無料で使えるようになる。
_MinGW - Wikipedia
MinGW は32bit版プログラムの生成しか対応してないので、今時は msys2 + MinGW-w64 という、64bit対応の環境が使われることが多いのだけど。スクリーンセーバの作成をしたいとなると、MinGW-w64 はそのへん対応してないので、MinGW を使うしかなく。 *1
さておき。せっかくなので、2022/08時点でのインストール手順をメモ。そのうち自分も手順を絶対に忘れそうなので…。
◎ インストーラを入手。 :
MinGW の入手先は、昔は SourceForgeだったけど、今は OSDN になっているのだとか。まあ、細かい各パッケージは SourceForge からダウンロードしているっぽいけれど。
_MinGW - Minimalist GNU for Windows Project Top Page - OSDN
mingw-get-setup.exe というファイルをダウンロードする。
_MinGW - Minimalist GNU for Windows Project Top Page - OSDN
mingw-get-setup.exe というファイルをダウンロードする。
◎ インストーラを実行。 :
mingw-get-setup.exe を実行する。以下の画面が出てくる。
MinGW のインストールディレクトリその他を指定。
その後のインストール作業に必要になるプログラムがいくつかダウンロードされる。
MinGW関係の色々なパッケージを選んでダウンロードできる画面が出てくる。
チェックボックスを左クリックするとメニューが出てくる。
その他のインストールするジャンルを選択する。
チェックをつけ終わったら、変更を指示。
パッケージのダウンロード画面が出てくる。
色々なパッケージがダウンロードされていく。
ダウンロードが終わると、パッケージが展開される。
ちなみに、左のほうで「All Packages」を選べば、全パッケージの一覧が表示される。
こんな感じの流れで、パッケージのインストールは終了。
- 「Install」をクリックして先に進む。
MinGW のインストールディレクトリその他を指定。
- デフォルトでは C:\MinGW になってる。
- 右のほうの「Change」をクリックすれば、インストール場所を変更できる。自分は D:\MinGW に変更した。
- 下のほうにあるチェックボックスは、「スタートメニューに登録するか」「デスクトップにショートカットファイルを作るか」といったオプション設定。
その後のインストール作業に必要になるプログラムがいくつかダウンロードされる。
- ダウンロードが終わったら「Continue」をクリック。
MinGW関係の色々なパッケージを選んでダウンロードできる画面が出てくる。
- 左のほうで「Basic Setup」を選択。
- 右のほうで、「mingw-developer-toolkit-bin」の頭のチェックボックスを左クリック。
チェックボックスを左クリックするとメニューが出てくる。
- 「Mark for Installation」を選んで、インストールを指示。
その他のインストールするジャンルを選択する。
- おそらくだけど、ada、fortran、objc は、使う場面がほとんど無いと思う。それ以外は全部チェックを入れる感じでいいかと。もちろん、「いいや、俺は (ada|fortran|Objective-C) をバリバリ使うんだ」という人はインストールすればよろしいかと。
チェックをつけ終わったら、変更を指示。
- 「Installation」→「Apply Chnages」を選択。
パッケージのダウンロード画面が出てくる。
- 「Apply」をクリック。
色々なパッケージがダウンロードされていく。
ダウンロードが終わると、パッケージが展開される。
- 「Close」をクリックして閉じる。
- 左のほうにあるチェックボックスを入れれば、次回からはダウンロードと展開が終わったら自動で閉じてくれるようになるらしい。自分は試してないけれど…。
ちなみに、左のほうで「All Packages」を選べば、全パッケージの一覧が表示される。
こんな感じの流れで、パッケージのインストールは終了。
◎ パスを通す。 :
インストールは終わったけれど、この状態では MinGW の各ツールにパスが通って無いので使えない。
えてしてその手の解説記事では、Windowsの環境変数 PATH に、以下の2つのディレクトリを追加していくけれど…。
自分も昔はそうしていたけど、他の開発関連ツール群と衝突してハマったことがあるので、それ以来、以下のようなbatファイルを作って、MinGW を使いたい時だけ環境変数を変更して利用している。
_mingw.bat
やっていることは、環境変数 PATH の一番最初に MinGW と msys のパスを追加したり、C/C++ 関係のヘッダファイルやライブラリファイルの場所を環境変数に指定しているだけ。
例えば、DOS窓を開いて mingw.bat を実行すれば、その後は mingw が使えるようになる。以下を眺めれば、mingw をインストールした場所にパスが通って各ツールが使えているのが分かるかと…。
えてしてその手の解説記事では、Windowsの環境変数 PATH に、以下の2つのディレクトリを追加していくけれど…。
- MinGWインストールフォルダ\bin
- MinGWインストールフォルダ\msys\1.0\bin
自分も昔はそうしていたけど、他の開発関連ツール群と衝突してハマったことがあるので、それ以来、以下のようなbatファイルを作って、MinGW を使いたい時だけ環境変数を変更して利用している。
_mingw.bat
@echo off @rem MinGW,MSYS enable @rem Please set your MinGW install Directory. set MINGW_PATH=C:\MinGW set MSYS_PATH=%MINGW_PATH%\\msys\1.0 set MINGWADDPATH=%MINGW_PATH%\bin;%MSYS_PATH%\bin set PATH=%MINGWADDPATH%;%PATH% set C_INCLUDE_PATH=%MINGW_PATH%\include set CPLUS_INCLUDE_PATH=%MINGW_PATH%\include set LIBRARY_PATH=%MINGW_PATH%\lib echo MinGW enable. echo add path %MINGWADDPATH%
- set MINGW_PATH=C:\MinGW の行を、自分の環境に合わせて変更すること。
やっていることは、環境変数 PATH の一番最初に MinGW と msys のパスを追加したり、C/C++ 関係のヘッダファイルやライブラリファイルの場所を環境変数に指定しているだけ。
例えば、DOS窓を開いて mingw.bat を実行すれば、その後は mingw が使えるようになる。以下を眺めれば、mingw をインストールした場所にパスが通って各ツールが使えているのが分かるかと…。
> mingw MinGW enable. add path D:\MinGW\bin;D:\MinGW\\msys\1.0\bin > which which "D:\MinGW\msys\1.0\bin\which" "D:\home\bin\which.cmd" > which gcc "D:\MinGW\bin\gcc.exe" > which make "D:\MinGW\msys\1.0\bin\make.exe" > gcc --version gcc (MinGW.org GCC Build-2) 9.2.0 Copyright (C) 2019 Free Software Foundation, Inc. ... > make --version GNU Make 3.81 Copyright (C) 2006 Free Software Foundation, Inc. ... This program built for i686-pc-msys
◎ コンパイルができるか動作確認。 :
gcc を使ってコンパイルができるか動作確認してみる。
以下のCソースファイルをコンパイルする。「Hello world!」と出力するだけのプログラム。
_hello.c
gcc でコンパイル。
ということで、gcc でコンパイルすることができた。MinGW のインストールは成功。
以下のCソースファイルをコンパイルする。「Hello world!」と出力するだけのプログラム。
_hello.c
#include <stdio.h> int main(void) { printf("Hello world!\n"); return 0; }
gcc でコンパイル。
> gcc hello.c > a.exe Hello world! > gcc hello.c -o hello.exe > hello.exe Hello world!
- gcc hoge.c で、hoge.c がコンパイルされて a.exe という実行ファイルができる。
- gcc hoge.c -o hoge.exe で、hoge.c がコンパイルされて、-o で指定したファイル名、hoge.exe という実行ファイルができる。
ということで、gcc でコンパイルすることができた。MinGW のインストールは成功。
*1: MinGW-w64 の libscrnsave.a、libscrnsavw.a は、ファイルはあるけど中身が空っぽなのです…。
[ ツッコむ ]
#2 [prog] スクリーンセーバのビルドの実験中
Windows10 x64 21H2 + MinGW (msys2 + MinGW-w64に非ず)で、スクリーンセーバのビルドができるかどうか実験中。
以下のページで紹介されているサンプルを利用させてもらって実験しているところ。ありがたや。
_よしいずの雑記帳 スクリーンセーバーの作り方
動作させてみた様子は以下。
以下のページで紹介されているサンプルを利用させてもらって実験しているところ。ありがたや。
_よしいずの雑記帳 スクリーンセーバーの作り方
動作させてみた様子は以下。
◎ メッセージが文字化けする件。 :
ビルドはできたものの、「設定」ボタンをクリックすると文字化けしているメッセージが表示されてしまう。改善できないかと試していて結構ハマってしまった。
てっきり resource.rc 内のメッセージが表示されているものと思い込んで色々試してみたのだけど、いくら試してもメッセージが変わらない・修正できなくて悩んでしまった。
_Resource Hacker
原因は自分の勘違いだった。設定ボタンをクリックして表示されるメッセージは、screensv.c 内で記述されていた。resource.rc は関係無かった…。screensv.c 側を変更したら、あっさりダイアログ内のテキストも変わってくれた。しかしそうなると、resource.rc 内の記述はどこで使われるのだろう…。
てっきり resource.rc 内のメッセージが表示されているものと思い込んで色々試してみたのだけど、いくら試してもメッセージが変わらない・修正できなくて悩んでしまった。
- UTF-8Nで保存してた resource.rc をSJISで保存し直したり。
- テキストを英数字で記述し直したり。
- Windows10がどこかにリソースをキャッシュして、そっちが表示され続けているのではと疑って、クリーンアップ機能その他を利用してみたり。
- Resource Hacker というツールを導入して、.scr の中に入っているリソースを確認してみたり。
- ファイル名を変更してみたり。
_Resource Hacker
原因は自分の勘違いだった。設定ボタンをクリックして表示されるメッセージは、screensv.c 内で記述されていた。resource.rc は関係無かった…。screensv.c 側を変更したら、あっさりダイアログ内のテキストも変わってくれた。しかしそうなると、resource.rc 内の記述はどこで使われるのだろう…。
◎ 結局こうなった。 :
手元では、以下の3つのファイルを同じ場所に置いて make と打てば .scr (mgscrsav.scr) が得られる状態になった。
_mgscrsav.c
_resource.rc
_Makefile
ただ、出来上がった mgscrsav.scr を右クリックして「Test」や「構成」を選んでも、以下のダイアログが表示されて実行できなくなってしまった…。
どうやら、作業フォルダを、シンボリックリンクを使って、別の場所にあるように見せかけつつ作業してたのがマズかったようだなと…。オリジナルのフォルダに移動してから、.scrを右クリック→「Test」「構成」を選んだら動作してくれた。
32bit版プログラムをWindows10 64bit上で動かしている状態なので、C:\Windows\SysWOW64\ 以下に .scr をコピーして動作確認。動いてくれた。
_mgscrsav.c
_resource.rc
_Makefile
ただ、出来上がった mgscrsav.scr を右クリックして「Test」や「構成」を選んでも、以下のダイアログが表示されて実行できなくなってしまった…。
ファイルを開くことができません インターネット セキュリティ設定のために、1つ以上のファイルを開くことができませんでした。
どうやら、作業フォルダを、シンボリックリンクを使って、別の場所にあるように見せかけつつ作業してたのがマズかったようだなと…。オリジナルのフォルダに移動してから、.scrを右クリック→「Test」「構成」を選んだら動作してくれた。
- 「Test」を選ぶ : フルスクリーン表示
- 「構成」を選ぶ : 設定ダイアログが表示される状態。
32bit版プログラムをWindows10 64bit上で動かしている状態なので、C:\Windows\SysWOW64\ 以下に .scr をコピーして動作確認。動いてくれた。
- Windows 64bit版、スクリーンセーバが32bit版なら、C:\Windows\SysWOW64\ 以下に .scr をコピー。
- Windows 64bit版、スクリーンセーバが64bit版なら、C:\Windows\System32\ 以下に .scr をコピー。
- Windows 32bit版なら、C:\Windows\System32\ 以下に .scr をコピー。
[ ツッコむ ]
以上、1 日分です。