TopCoderと同バージョンのgcc環境をVMware上で構築


競技プログラミングTopCoderのコンテストで用いられるC++コンパイル環境と同等の環境を、VMware上で構築した方法のメモです。2013年4月現在の情報です。

通常のAlgorithm SRM(Single Round Match)やAlgorithm MM(Marathon Match)のコンテストに参加する場合、あえてここに記載するように環境を構築する必要はありません。

ただし、実行速度の向上を目的とする一部のMarathon Matchで、コンパイラの生成するアセンブリコードを確認したい場合などでは、この手順で、TopCoderの環境と同バージョンのgccを利用できるようになります。

なお、TopCoderのC++コンパイラはこちらに記載の通り、以下のようになっています。

gcc 4.0.2 (RedHat EL 4)

追記: コンテスト後の議論を確認したところ、TopCoderは64ビット環境ではなく32ビット環境のようです。ですので、以下の情報は正しくありません。いずれにしても、他の競技者の方もgccのバージョンで苦労されていたようですので、バージョンは合わせておくに越したことはないでしょう。

以下、構築手順を示します。

  • CentOS 4.8 x86_64 のVMware用イメージを適当に探してきてダウンロードします。(CentOS 4.3が入手可能な場合は、そちらを利用したほうがよいでしょう。) http://heiserz.com/2012/09/07/centos-vmware-images/
  • VMwareに仮想マシンを追加して起動します。なおこの際、イメージをコピーしたか移動したか聞かれるので、「移動」と答えます。(「コピー」にすると仮想マシンのMACアドレスが変更される関係上、面倒なことになります。)
  • passwdを適当に設定します。
  • service iptables stop; chkconfig iptables offでファイアウォールを停止します。
  • ifconfigでIPアドレスを確認し、ホストOS側からPuTTY等のSSHクライアントで仮想マシンに接続します。
  • /etc/yum.repos.d/CentOS-Base.repo を編集します。(この設定ファイルに元から設定されているレポジトリは、もはや提供されていません。公式の過去バージョンレポジトリは、 http://vault.centos.org/ ですが、yumからのアクセスに失敗することが多いので、適当なミラーに設定します。)
/etc/yum.repos.d/CentOS-Base.repo
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&rep
o=os
baseurl=http://mirror.hmc.edu/centos/4.8/os/$basearch/
gpgkey=http://mirror.hmc.edu/centos/RPM-GPG-KEY-centos4

#他も同様に修正
  • gcc 4と関連RPMをインストールします。(ここで、TopCoderより新しいバージョンのgcc 4がインストールされてしまいます)
# yum install gcc4 gcc4-c++
  • TopCoderと同じバージョンのgcc 4をインストールしなおします。
# wget http://vault.centos.org/4.3/os/x86_64/CentOS/RPMS/gcc4-4.0.2-14.EL4.x86_64.rpm
# wget http://vault.centos.org/4.3/os/x86_64/CentOS/RPMS/gcc4-c++-4.0.2-14.EL4.x86_64.rpm
# rpm -ivh gcc4-4.0.2-14.EL4.x86_64.rpm
# rpm -ivh gcc4-c++-4.0.2-14.EL4.x86_64.rpm

思い出しながら書いたので、手順に間違いがあるかもしれません。