Mono 3.10 を CentOS 6 にインストール

Mono 3.10 のビルド・インストール – 総武ソフトウェア推進所を参考にして、 CentOS 6 に Mono 3.10 をインストールしたので、その過程を残しておきたいと思います。

今回は Mono がもともと入っていない環境で、インストール先フォルダのオプションは使用していません。

libgdiplus (3.8) のインストール

libgdiplus は、 Windows Forms などを動かすのに必要となるライブラリです。
必須ではないのですが、 C# を使うならばインストールしておくといいと思います。

依存パッケージのインストール

1
2
3
4
$ sudo yum install \
cairo-devel libexif-devel freetype-devel fontconfig-devel \
glib2-devel libjpeg-devel libpng-devel libtiff-devel \
giflib-devel libX11-devel libXrender-devel

ソースコードの取得とコンパイル準備

1
2
3
4
$ wget http://download.mono-project.com/sources/libgdiplus/libgdiplus-3.8.tar.gz
$ tar -xvf libgdiplus-3.8.tar.gz
$ cd libgdiplus-3.8/
$ ./configure

コンパイルとインストール

1
2
$ make
$ sudo make install

Mono 本体(3.10)のインストール

Mono のコンパイルには時間がかかりました。コンソールを見て待つのではなく、別の作業をするのをオススメします。

依存パッケージのインストール

1
$ sudo yum install bison

ソースコードの取得とコンパイル準備

1
2
3
4
$ wget http://download.mono-project.com/sources/mono/mono-3.10.0.tar.bz2
$ tar -xvf mono-3.10.0.tar.bz2
$ cd mono-3.10.0/
$ ./configure --prefix=/opt/mono/3.10/ --with-libgdiplus=installed --with-ikvm-native=no --with-monotouch=no --with-monodroid=no --with-xammac=no --with-mcs-docs=no --with-x

コンパイルとインストール

1
2
3
$ make get-monolite-latest
$ make
$ sudo make install

インストールの確認

Mono の確認

インストールできているかを確認します。
mono -Vversion 3.10 の表示があれば成功しています。

C# コンパイラの確認

次に、実際に C# のコードをコンパイルしてみます。
実行して Hello Mono!! と表示されば成功です。

1
2
3
4
5
6
7
class Test
{
public static void Main()
{
System.Console.WriteLine("Hello Mono!!");
}
}
1
2
3
$ mcs hello.cs
$ mono hello.exe
Hello Mono!!

libgdiplus の確認

最後に、メッセージボックスを表示させることで、 libgdiplus の確認を行います。
メッセージボックスが現れれば成功です。

1
2
3
4
5
6
7
class Test
{
public static void Main()
{
System.Windows.Forms.MessageBox.Show("WinForms in Mono", "This is title");
}
}
1
2
$ mcs mb.cs -r:System.Windows.Forms
$ mono mb.exe
サンプルプログラムの実行結果サンプルプログラムの実行結果

例外が出る場合

System.TypeInitializationExceptionSystem.DllNotFoundException が出る場合は、 libgdiplus ライブラリへのリンクが正しくできていない状態です。以下の手順で修正することができます。

まずは find /usr -name libgdiplus.so によって、 /usr/local/lib/libgdiplus.so と出力されるのを確認します。(インストール先を変えた場合はそのフォルダ内のものが出力されるはず)
そして、 ldconfig -p | grep libgdiplus でリンカが libgdiplus を認識しているかを確認します。例外が出ている場合、隣家に認識されていないため何も出力されないと思います。
その際、設定ファイルである /etc/ld.so.conf を編集します。 vim や nano 等のエディタで開いて、 /usr/local/lib の行を追加します。
それを終えたら sudo ldconfig でリンカに設定を再読み込みさせ、再び ldconfig -p |grep libgdiplus によりライブラリが認識されたかを確認します。
良さそうな出力があれば、 mono mb.exe を実行するとメッセージボックスが現れるはずです。

参照記事