mingwを自分で構築する理由
- 公式サイトから標準パッケージをダウンロードする1,000人のユーザーではなく、必要に応じてコンポーネントを構成するため。
- そのため、dllを使用して共有ライブラリとして必要なコンポーネントと、静的にリンクするコンポーネントを自分で判断できます。
- gccが可能な限り効率的に機能することを確認します。
- 実行可能モジュールのブックマークを除外します。
- GNUユーティリティの構築およびインストール方法をよりよく理解するため。
誰もが自分の集会の理由を見つけることができます。
何が必要ですか?
奇妙なことに、Mingwをビルドするには、Mingw自体が必要です。 同志たちは、必要なパッケージをダウンロードしてインストールするきちんとしたインストールプログラムを試み、作成しました。 公式ウェブサイトにあります。
mingw自体に加えて、インストール中に「C ++ Compiler」と「MinGW Developer ToolKit」を選択します。 C:\ MinGWに入れます。
ソースをダウンロード:
- gmp-5.0.1
- ppl-0.11
- cloog-ppl-0.15.10
- mpfr-3.0.0
- mpc-0.8.2
- binutils-2.21
- mingwrt-3.18
- w32api-3.15-1
- libiconv-1.13.1
- gcc-4.5.2
必要に応じて:
忍耐、忍耐、幸運なくしてはいけません!
組立
最速のハードドライブに作業フォルダーC:\ mbuildを作成します。 C:\ mbuild \ distribにすべてのソースを追加します。 C:\ mbuild \ releaseでmingwを成長させます。 ダウンロードしたmsysを実行します...
cd / c / mbuild
小さな発言。 ほとんどの指示では、gmp、mpfr、mpcのソースをフォルダーに入れてgccに保存するように指示しています。これらは自動的に収集されます。 gccをCLooPに固定するため、これは行いません。これはgmpに依存します。 つまり、gcc構成を開始する前にgmpをビルドする必要があります。
GMP
tar -xjf distrib / gmp-5.0.1.tar.bz2 && cd gmp-5.0.1
mkdirビルド&& cdビルド
../configure --prefix = '/ c / mbuild / release' --enable-cxx --disable-static --enable-shared CPPFLAGS = '-fexceptions'&> config.my.log
make -j4&> make.my.log
make install&> install.my.log
- --enable-cxx CPPFLAGS = '-fexceptions'-正しいpplアセンブリに必要
- --disable-static --enable-shared -Windowsでは、共有バージョンと静的バージョンを同時に使用することはできません。そうしないと、他のコンポーネントのアセンブリが失敗する可能性があります。 共有バージョンを収集します。 心配しないでください。依存関係は、mingwを使用してコンパイルされたプログラムには転送されません。
「-s -O2 -mtune = i686」などの最適化キーCFLAGS、CXXFLAGS、およびLDFLAGSを使用しないことが非常に重要です。このため、pplがgmpを見つけられない場合がありました。
Ppl
tar -xjf ../../distrib/ppl-0.11.tar.bz2 && cd ppl-0.11
mkdirビルド&& cdビルド
../configure --prefix = '/ c / mbuild / release' --disable-static --enable-shared --disable-nls --enable-threads --disable-debugging --with-gmp-prefix = / c / mbuild / release --with-cflags = '-s -O2' --with-cxxflags = '-s -O2'&> config.my.log
make -j4&> make.my.log
make install&> install.my.log
- --disable-static --enable-shared -gmpに対して選択したリンクオプションは、pplに対しても選択する必要があります。
- --disable-nls-各国語サポートを無効にします 。アプリケーションがロシア語で通信する必要はありません。
- --enable-threads -mingwを使用してマルチスレッドアプリケーションをコンパイルします。
- --disable-debugging-デバッグ情報は役に立ちません -余分なスペースを占有します。
- --with-gmp-prefix-gmpを探す場所を指示します。
- --with-cflags --with-cxxflags-いくつかの最適化。
設定中に、conftestプログラムが起動しなかったことがウィンドウに表示される場合があります。 パニックにならないでください-これはconfigureスクリプトの結果です。
CLooG / PPL
tar -zxf ../distrib/clog-ppl-0.15.10.tar.gz
cd cloog-ppl-0.15.10
mkdirビルド&& cdビルド
../configure --prefix = '/ c / mbuild / release' --disable-static --enable-shared --with-ppl = / c / mbuild / release --with-gmp = / c / mbuild / release CFLAGS = '-s -O2' CPPFLAGS = '-s -O2'&> config.my.log
make&> make.my.log
構成スクリプトには不愉快な部分があります。 何らかの理由で、それらは単に存在しません。 make.my.logログは、m4フォルダーが欠落していることを報告します。 私は彼女の不在の理由を理解していません。 ppl-0.11からコピーするだけです。 幸いなことに、必要なスクリプトがあります。
make&> make.my.log
make install&> install.my.log
オプションは、前の説明から明らかです。
MPFR
tar -xjf distrib / mpfr-3.0.0.tar.bz2 && cd mpfr-3.0.0
mkdirビルド&& cdビルド
../configure --prefix = '/ c / mbuild / release' --disable-static --enable-shared --enable-thread-safe --with-gmp = / c / mbuild / release CFLAGS = '-s -O2 'CPPFLAGS ='-s -O2 '&> config.my.log
make -j4&> make.my.log
make install&> install.my.log
MPC
tar -xzf distrib / mpc-0.8.2.tar.gz
cd mpc-0.8.2
mkdirビルド&& cdビルド
../configure --prefix = / c / mbuild / release --disable-static --enable-shared --with-gmp = / c / mbuild / release --with-mpfr = / c / mbuild / release CFLAGS = '-s -O2' CPPFLAGS = '-s -O2'&> config.my.log
make -j4&> make.my.log
make install&> install.my.log
リビコン
tar -xzf distrib / libiconv-1.13.1.tar.gz && cd libiconv-1.13.1
mkdirビルド&& cdビルド
../configure --prefix = / c / mbuild / release --enable-shared --disable-static --disable-nls CFLAGS = '-s -O2 -mno-cygwin' CPPFLAGS = '-s -O2 -mno -cygwin '&> confgi.my.log
make -j4&> make.my.log
make install&> install.my.log
一般に、libiconvはオプションですが、そのサポートを有効にすることが望ましいです(このmingwで他のgnuユーティリティをビルドする場合に非常に便利です)。
- CFLAGS = '-mno-cygwin' libiconvをmsysで正しくビルドするには、CygWinを使用していないことを明示的に示す必要があります。
Binutils
tar -xjf distrib / binutils-2.21.tar.bz2 && cd binutils-2.21
mkdirビルド&& cdビルド
../configure --prefix = / c / mbuild / release --disable-nls --enable-threads --with-gmp = / c / mbuild / release --with-mpc = / c / mbuild / release- with-mpfr = / c / mbuild / release --with-ppl = / c / mbuild / release --disable-ppl-version-check --with-cloog = / c / mbuild / release --disable-cloog-version -check CFLAGS = '-s -O2' CPPFLAGS = '-s -O2'&> config.my.log
make -j4&> make.my.log
make install&> install.my.log
- --disable-ppl-version-check --disable-cloog-version-check pplバージョン検証スクリプトが正確に10バージョンを探しており、それ以上ではないという事実に出くわしたとき、ここで状況にかかわらず、これらのオプションを慣性で使用しますすでに修正済み。 必要に応じて、ppl_version_minor処理を確認してconfigureスクリプトを掘り下げることができます。 Binutils-2.21は正常に構成されていますが、gcc-4.5.2は構成されていません。
含む
C:\ mbuild \ distrib \ w32api-3.14-mingw32-src.tar.lzmaをC:\ mbuild \ w32apiに解凍します。 アセンブリ中にmingwrtがそれを見つけることができるのはw32apiです。
tar -xzf distrib / mingwrt-3.18-mingw32-src.tar.gz
cp -r w32api / include / c / mbuid / release
cp -r mingwrt-3.18-mingw32 / include / c / mbuild / release
構成中にすべてのdllを正しく検索するには、PATHにリリースへのパスを追加します
export PATH = $ PATH:/ c / mbuild / release
Gcc
tar -xjf gcc-4.5.2.tar.bz2
cd gcc-4.5.2
mkdirビルド&& cdビルド
../configure --prefix = / c / mbuild / release --enable-shared = libstdc ++ --enable-threads --enable-version-specific-runtime-libs --enable-languages = c、c ++ --with- dwarf2 --disable-sjlj-exceptions --disable-win32-registry --disable-werror --disable-nls --disable-multilib --with-gmp = / c / mbuild / release --with-ppl = / c / mbuild / release --disable-ppl-version-check --with-cloog = / c / mbuild / release --disable-cloog-version-check --with-mpfr = / c / mbuild / release --with- mpc = / c / mbuild / release --enable-libgomp --with-libiconv-prefix = / c / mbuild / release --enable-libstdcxx-debug --enable-cxx-flags = '-s -O2'- with-boot-ldflags = '-s'&> config.my.log
make -j4 BOOT_CFLAGS = '-s -O2' BOOT_CPPFLAGS = '-s -O2'&> make.my.log
最も長く最も責任のある部分。 私は完全なソースコードを使用します
gcc、およびlibgompとzlibを含めるように、gcc-coreとgcc-c ++を個別にではなく、
それらはgcc-coreの一部としては行きません。
- --enable-shared = libstdc ++ -通常、ライブラリを静的にコンパイルしますが、ネイティブSTLの代わりにstlportを使用する必要がある場合があるため、シュレッドします。
- --enable-version-specific-runtime-libsランタイムヘッダーファイルとライブラリの場所に影響します。 このオプションは、1つのmingwから複数のバージョンのランタイムライブラリを使用する可能性を提供するために必要です。
- --enable-languages = c、c ++ -CおよびC ++言語用のコンパイラをビルドします。
- --with-dwarf2 -dwarf-2デバッグ情報
- --disable-sjlj-exceptions -sjlj例外を無効にします
- --disable-win32-registry -Windowsレジストリ内のincludeフォルダーに関する情報を検索するようにgccを構成するのが流行です。 これは私たちには興味がありません。
- --disable-werror -werrorは手動で設定した場合に有効です。
- --disable-nlsこのオプションは、ロケールおよびmingwのワイド文字に関連するすべてに影響しません。 NLSを有効にしても、サポートは不完全です(たとえば、現在のユーザーロケールの取得が正しく機能しない-std :: locale( "")は常にロケール( "C")を返します)。 このオプションは、コンパイラメッセージにのみ影響します。 個人的に、彼がロシア語を話せたら私は珍しいでしょう...
- --disable-multilib-コンパイラを使用してWindowsプログラムを作成します
- --enable-libstdcxx-debugこのオプションを使用すると、メインバージョンのstdc ++ライブラリに加えて、デバッグ中にライブラリ関数を移動できるようにデバッグすることができます。
残念ながら、--enable-libstdcxx-debugキーで接続したバージョンだけでなく、メインのデバッグ情報も収集されます。 gccビルドオプションではこれを克服できませんでした。 したがって、次のオプションを提案します。
cd i686-pc-mingw / libstdc ++-v3
make -j4 CFLAGS = '-s -O2' CXXFLAGS = '-s -O2'&> make.my.log
ここで少しcheしました。 実際には(クロスコンパイラをビルドする場合を含む)、最初にmake all-gccを使用してgccをビルドし、次にランタイムを実行してから、すべてのgccのアセンブリを完了する必要があります。 プロセスは、たとえばここで説明されています 。 しかし、この特定のケースではすべてがそのように機能するため、気にしません。
cd ../../
make install&> install.my.log
残念ながら、プロファイリング(profiledbootstrapの作成)を使用してmingwの下でgccをコンパイルすることはできませんでした-プロセスはエラーで終了しました。 最も一般的なセグメンテーションフォールトコンパイラ。 なんと残念なことでしょう...彼らは、コンパイル速度の増加は〜7%だと言います。
ランタイムとW32API
w32apiは、新しいgccを使用して構築する必要があります。 これを行うには、fstabファイル(デフォルトC:\ MinGW \ msys \ 1.0 \ etc \ fstab)で、C:\ MinGWをC:\ mbuild \ releaseに変更し、新しいmsysを実行します。 このmsysインスタンスは、新しくコンパイルされたgccを使用します。 しかし、まだ依存関係を取り除いていないので、古いmingwのdllを探す場所をmsysに指示する必要があります。
export PATH = $ PATH:/ c / MinGW / bin
W32api
cd ../../w32api
mkdirビルド&& cdビルド
../configure --prefix = / c / mbuild / release CFLAGS = '-s -O2' CPPFLAGS = '-s -O2'&> config.my.log
make&> make.my.log
make install&> install.my.log
ミンウォート
tar -xzf distrib / mingwrt-3.18-mingw32-src.tar.gz && cd mingwrt-3.18-mingw32-src
mkdirビルド&& cdビルド
../configure --prefix = / c / mbuild / release CFLAGS = '-s -O2' CPPFLAGS = '-s -O2'&> config.my.log
make&> make.my.log
make install&> install.my.log
gmpはgccによって作成されていないため、ほとんどの場合libstdc ++。Dllおよびlibgcc_s_dw2-1.dllに依存しています。 最初はネイティブgccで組み立てられ、2番目は古いmingwからコピーする必要があります。 または、新しいgccでgmpを再構築して、依存関係を取り除くことができます。
サイズを小さくするために、不要なフォルダを安全に削除できます。 たとえば、共有/ドキュメント。
ほとんどすべて。 快適な作業のために、makeをビルドする必要があります。
作る
tar -xjf distrib / make-3.82.tar.bz2 && cd make-3.82
./configure --disable-nls --with-libiconv-prefix = '/ mingw' CFLAGS = '-s -O2' CPPFLAGS = '-s -O2'&> config.my.log
make -j4&> make.my.log
cp make.exe /c/mbuild/release/bin/mingw32-make.exe
今すべて。 パパC:\ mbuild \ releaseはきちんとしたmingwを得ました。 パッケージをテイストに追加し、きちんとしたスクリプトでラップして、 nuwen mingwのようなものを取得します。 素敵なビルドを!
追記:ダウンロードしたmingwパッケージには次のものも含まれています。
- mingw32-autoconf
- mingw32-automake
- mingw32-autotools
- mingw32-basic-dsdtar
- mingw32-bzip2
- mingw32-cygutils
- mingw32-expat
- mingw32-gdb
- mingw32-gendef
- mingw32-gettext
- mingw32-libarchive
- mingw32-libtool
- mingw32-mingw-get
- mingw32-mingw-utils
- mingw32-package-list
- mingw32-pdcurses
- mingw32-pexports
- mingw32-popt
- mingw32-pthreads-w32
- mingw32-xz