最新の日記 記事一覧 ユーザー登録 ログイン ヘルプ

登 大遊@筑波大学情報学類の SoftEther VPN 日記

Daiyuu Nobori's SoftEther VPN Diary since 2004

トップページ | 所属・経歴 | 活動・プロジェクト | 研究・開発
作品・著書・論文 | 発表・講演・授業 | 連絡先 | アルバム | 技術的な書き物
mixi の日記:
http://mixi.jp/show_friend.pl?id=672294

♪ 日記などへの特選リンク集 ♪
IKeJI さん | Cedar さん | Mayaqua さん | thisjun さん
bakueikozo さん | mugen さん | 分散計算の神林君 | 榮樂大先生 (hdk) | 吉田戦車 (ceekz) | セキュリティの神・高木大先生 | ron さん
AC の古澤さん | AC の TAKAO 君 | AC の NIES 君 | AC の古橋君 | AC な wakatono さん | AC のいのひろ君
AC な三戸君 | AC な柴田君 | AC の小野君 | AC すぎる松本君 | AC な小西君 | AC な google の及川さん | AC な tomocha さん
偉大な研究室の先輩まつもとゆきひろ氏 | 板野先生の blog | 新城先生の最近の fj への投稿 | つくばあさひなあんてな | hatena 筑波大学 AC リング

日記でよく出てくる「AC」(もともとは筑波大学用語) について詳しくは ここここ をお読みください。


 | 

2009年1月26日 (月)

日記を毎日書くぞ

最近、面倒になってこの blog を数週間に 1 回程度の頻度でしか書かなくなっている。


また毎日日記を書こうと決意したのでここに宣言しておきます。

gcc クロスコンパイル環境について

研究や仕事で、色々な OS / CPU 上のプログラムをコンパイルしてテスト実行することがよくあります。

たとえば OS では Linux / Solaris / FreeBSD / Mac OS X 等があり、CPU では x86, x86_64, SH4, MIPS, ARM, PowerPC, SPARC 等があります。


これらの OS には gcc 等のコンパイラが入っており、ssh で接続してソースコードを転送し make すれば、一応、コンパイルはできますが、組み込み機器などでハードディスクや CPU が非常に遅い場合は、少しのプログラムをコンパイルする場合でも数十分〜数時間かかってしまうことがあります。


このような場合は gcc をターゲットの OS / CPU に合わせてコンパイルすることによって、手元の高速な PC / ワークステーション上でターゲットの OS / CPU 用のプログラムを高速にコンパイルすることができるようになります。


gcc を任意の OS / CPU に合わせて構築する方法

たとえば手元に Windows XP がインストールされた PC があり、普段の日常生活やプログラミングには Windows を使用している場合で、ターゲットとなるコンピュータが CPU がとても遅い組み込み機器の場合は、手元の Windows XP 上でターゲットとなる機器用のコードを生成できる gcc を構築することによりその機器で動作するバイナリを直接吐き出すことができます。その機器で動くカーネルのコンパイルも可能です。

このような手法を「クロスコンパイル」と呼びます。


gcc を用いてクロスコンパイル環境を構築する方法は簡単です。

手元の PC が Linux や FreeBSD であれば当然可能ですが、Windows XP 等の場合でも cygwin を入れれば可能です。


cygwin を入れて適当なディレクトリを作成し、そのディレクトリにターゲットとなる機器からコピーしてきた /usr/include、/lib、/usr/lib 等を置きます。このディレクトリを prefix と呼びます。


gcc を構築するためにはまず cygwin 上で binutils を構築する必要があります。http://core.ring.gr.jp/pub/GNU/binutils/ 等からダウンロードしてきて、tar xzvf で展開します。

configure で --with-included-gettext --target=mipsel-pc-linux-gnu --host=i686-pc-cygwin --build=i686-pc-cygwin --prefix=/tmp/files/ 等と指定して Makefile を生成して make するだけです。すると、「target」で指定した CPU および OS 用のバイナリを扱える binutils を生成できます。


次に gcc を構築します。http://core.ring.gr.jp/pub/GNU/gcc/ 等からダウンロードしてきて同様に展開し、configure で --enable-languages=c,c++ --with-included-gettext --disable-libgomp --enable-shared --enable-threads=posix --target=mipsel-pc-linux-gnu --host=i686-pc-cygwin --build=i686-pc-cygwin --prefix=/tmp/files/ --with-mpfr=/usr/local/ -v 等と指定して make すると、gcc が構築できます。


f:id:softether:20090126232919j:image


gcc の構築には数時間かかる場合もあります。一旦、gcc が構築されれば、あとはいつでもその gcc を用いてターゲット機器用のバイナリファイルを生成することができます。


target として指定すべき文字列

binutils や gcc の configure の中身を見てみればわかるのですが、以下のように指定するのが良いようです。

Linux の場合

  • i686-pc-linux-gnu
  • x86_64-pc-linux-gnu
  • mipsel-pc-linux-gnu
  • powerpc-pc-linux-gnu
  • sh4-pc-linux
  • arm-pc-linux

FreeBSD の場合

  • i386-pc-freebsd
  • x86_64-pc-freebsd

Solaris の場合

  • i386-pc-solaris2
  • x86_64-pc-solaris2
  • sparc-sun-solaris2
  • sparc64-sun-solaris2

Mac OS X の場合

  • i686-pc-darwin9
  • x86_64-pc-darwin9
  • powerpc-pc-darwin9
  • powerpc64-pc-darwin9

UNIX / Linux 上で Windows 用の EXE を生成

上記のように Windows 上に UNIX / Linux 用のコンパイル環境を構築することができるのと同様に、Linux 上等に Windows 用の EXE や DLL を生成する環境も構築可能です。

とおりすがりとおりすがり 2009/01/27 21:03 Cygwinも良いんですが、MinGW+msysでクロス開発環境を構築するとパフォーマンス的なオーバヘッドがなくて良いと思いますよ。CygwinだとPOSIX APIをフルエミュレートしてしまうので。

o-yajio-yaji 2009/01/28 00:21 もう”27日”終わりましたけど、、、。

トラックバック - http://d.hatena.ne.jp/softether/20090126
 | 

<< 2009/01 >>
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31




※ この Web サイトのコンテンツは 登 大遊 が個人的に運営しているものであり、ソフトイーサ株式会社や筑波大学内での立場として公式なコメントを掲載しているものではありません。一応コメントは投稿できるようにしていますが、個人的に運営している日記のため、自分が不快に思ったコメントは前触れ無く削除しております。ご了承ください。同様に会社に関するコメントなどについても、削除される可能性があります。コメント書き込み機能については、匿名の掲示板のような状態になることを予防するため、はてなユーザーからのみ受け付けるように設定することもあります。


VPN 2.0 開発元: 筑波大学発ベンチャー企業 ソフトイーサ株式会社 (茨城県つくば市) 「HardEther」 (ハードイーサ) 広域イーサネット ギガビット 専用線サービス