2012年12月23日

MinGW-w64のビルド

MinGW-w64は、MinGWのmingwrtとw32apiの代わりに使用する、ヘッダファイルとCランタイムライブラリです。

sezeroさんがビルドしたものを使っていたのですが、mingw-w64-v1.0.7がリリースされてしばらく経つのに、sezeroさんの方はmingw-w64-v1.0.6から更新されていないので、自前でビルドしてみました。

2013/04/21 追記
sezeroさんがビルドしたものは、2013/04/10付のrev.5747で、mingw-w64-v1.0.8になりました。


MinGW-w64は、こちらにあります。
GCC for both x64 & x86 Windows! - MinGW-w64
http://mingw-w64.sourceforge.net/

mingw-w64-v1.0.x系とmingw-w64-v2.0.x系があります。
Windows XPに対応しているのは、mingw-w64-v1.0.x系です。
mingw-w64-v2.0.x系は、Windows Vista/7以降です。


mingw-w64-v1.0.x系を、MinGW 32bit環境にインストールする手順を説明します。
64bitとのmultilib環境とか、mingw-w64-v2.0.x系は動作確認していません。

2013/06/10 追記
Windows XPのMinGW環境で、mingw-w64-v2.0.8をビルドしてgcc-4.8.1と一緒に使用し、
gcc-4.8.1とgcc-4.8.1をビルドするのに必要なライブラリ一式
FFmpeg本体とFFmpegをビルドするのに必要なライブラリ一式
などをmakeしてみたところ、特に不具合はありませんでした。

mingw-w64-v2.0.x系は、Windows Vista/7 APIが大量に追加されたと書かれていたので、Windows Vista/7以降でしか使用できないと思い込んでいましたが、Windows XPでも使用できました。
mingw-w64-v2.0.x系のビルド手順は【補足】をお読みください。


手順としては、ヘッダファイルを先にインストールしてから、Cランタイムライブラリを(crt)ビルドしてインストールします。

MinGW-w64のトップページから、左メニューのDownloadsにあるSourceをクリックします。
リンク先の、
Tarballs for the mingw-w64 sources are hosted on SourceForge.
と書いてある「SourceForge」のリンクをクリックします。
http://sourceforge.net/projects/mingw-w64/files/mingw-w64/mingw-w64-release/
ここから、
mingw-w64-v1.0.8.tar.gz
をクリックして、適当なディレクトリにダウンロードします。

MSYSで、ファイルを保存したディレクトリに移動し、
$ tar xzf mingw-w64-v1.0.8.tar.gz
$ cd mingw-w64-v1.0.8/mingw-w64-headers
$ ./configure --prefix=/mingw --with-sdk=all
$ make
$ make install

インストール先が「/mingw/i686-pc-mingw32/」になるので、「include」ディレクトリを、MinGW環境に上書きコピーします。
$ cp -rp /mingw/i686-pc-mingw32/include /mingw

次に、crtをインストールします。
ヘッダファイルと同様に、最後に「lib」ディレクトリを、MinGW環境に上書きコピーします。
$ cd ../mingw-w64-crt
$ ./configure --prefix=/mingw
$ make
$ make install
$ cp -rp /mingw/i686-pc-mingw32/lib /mingw

以上で終了です。


【補足】
sezeroさんがビルドしたものには、OpenCLなど、sezeroさんが独自で入れているライブラリとヘッダファイルがあります。

OpenCLなどが必要な場合は、以下の、sezeroさんのmingw-w64-v1.0.6相当のものをMinGW環境に上書きコピーしてから、mingw-w64-v1.0.7をインストールすれば良いと思います。

2013/04/21 追記
2013/04/10付のrev.5747は、mingw-w64-v1.0.8になっています。

http://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/sezero_4.5_20111101/
sezero_20111101-w32-update-rev.5339.zip
sezero_20111101-w32-update-rev.5747.zip

mingw-w64-v2.0.x系は動作確認していないのですが、以下の手順でインストールできます。
Windows Vista/7 をお使いの方は試してみてください。

2013/06/10 追記
Windows XP でも使用できるのを確認しました。

http://sourceforge.net/projects/mingw-w64/files/mingw-w64/mingw-w64-release/
ここから、
mingw-w64-v2.0.8.tar.gz
をクリックして、適当なディレクトリにダウンロードします。

2013/06/10 追記
ヘッダのconfigureオプションに「--enable-secure-api」を追加しました。
fopen_sなど、セキュリティ強化版のAPIをデフォルトで使用できるようになります。

MSYSで、ファイルを保存したディレクトリに移動し、
$ tar xzf mingw-w64-v2.0.8.tar.gz
$ cd mingw-w64-v2.0.8
$ ./configure --prefix=/mingw --enable-sdk=all --enable-secure-api --without-crt
$ make
$ make install
$ cp -rp /mingw/i686-pc-mingw32/include /mingw

$ ./configure --prefix=/mingw --without-headers
$ make
$ make install
$ cp -rp /mingw/i686-pc-mingw32/lib /mingw

以上で終了です。


【更新履歴】を見る
posted by あべちん at 15:51 | Comment(6) | TrackBack(0) | GCC自前ビルド
この記事へのコメント
libcdio+ffmpegについて

mingw-w64-v1.0.7を入れてlibcdio(paranoia含む)はmakeできましたが、ffmpegのconfigureで「libcdioが無い」と怒られます。

sezero_20111101-w32-update-rev.5339だとffmpegのmakeまで正常に行えます。

あべちんさんは最後までmake出来ましたでしょうか?。
Posted by X5-452 at 2012年12月31日 03:59
X5-452さん

確認のため、mingw-w64-v1.0.7の環境で、libcdioとparanoiaのソースコードを解凍し直して、configureからやり直して再インストールしてみましたが、ffmpegもmakeできました。

何か微妙に違うのでしょうかね?

ffmpegのconfig.logで、libcdioに関するエラーメッセージは出ていませんか?
Posted by あべちん at 2012年12月31日 12:15
解決しましたw

libcdio(paranoia含む)のみffmpegに入れた時は
--extra-libs="-liconv -lwinmm"

libiconvもリンクしないといけないのを忘れてました。

sezero_20111101-w32-update-rev.5339でmake成功したのは多数のライブラリーが入っててlibcdio以外にlibiconvが必要なライブラリーをffmpeg ./configure で指定してたためでした。

年末の忙しい時にご迷惑お掛けしましたm(__)m
色々と有難う御座ました。

来年も、あべちんさんにとって良い年でありますように。
Posted by X5-452 at 2012年12月31日 18:01
X5-452さん

私の場合は、足りないライブラリをconfigureに書き足しているので、分かりにくいかもしれませんね。

こちらこそ、いろいろとお世話になり、ありがとうございました。
X5-452さんも、来年も良い年でありますように。
Posted by あべちん at 2012年12月31日 20:18
お世話になってます。

mingw-w64-v2.0.7の./configureにてあべちんさんの表記にミスを見つけたので報告します。
--enable-sdk=all --without-crt
ではなく
--enable-sdk=all --without-headers
です(。>д<。)ゞ
どうしても--enable-sdk=all が無いぞって言われると思ってヘルプで発見しました。
Posted by キュアミューズ=裕己 at 2013年02月12日 13:23
キュアミューズ=裕己さん、こんにちは。管理人です。

コメントありがとうございます。

v2.0.7のsdk関連はheadersの方にあり、先にcrtなしでmakeしますので、
--enable-sdk=all --without-crt
で間違っていないと思います。

v2.0.7の場合はソースコードのトップディレクトリでconfigureを実行しますが、v1.0.7のheadersの場合は、mingw-w64-headersディレクトリで実行します。

あと、sdk関連では、v2.0.7は「--enable-sdk=all」、v1.0.7は「--with-sdk=all」で、enableとwithの違いがあります。

このあたりを確認して、やり直してみてください。
Posted by あべちん at 2013年02月24日 11:58
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/60976329
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック