programming/mono/build_install/mono_from_tarball/index.wiki.txt

current previous
1,12 1,14
 
${smdncms:title,Mono のビルド・インストール (tarball)}
${smdncms:title,Mono のビルド・インストール (tarball)}
 

        

        
~
[[Mono:http://www.mono-project.com]]をソースからビルドしてインストールする手順。 本文の内容は''Mono 5.0.0''に基づく。
[[Mono:http://www.mono-project.com]]をソースからビルドしてインストールする手順。 本文の内容は''Mono 4.6.2''に基づく。
 

        

        
 
また、ビルドに使用した環境はUbuntu 16.04 LTS 64bit、本文中に掲載している所要時間はIntel Core i5-6402Pを積んだマシンで計測したもの。
また、ビルドに使用した環境はUbuntu 16.04 LTS 64bit、本文中に掲載している所要時間はIntel Core i5-6402Pを積んだマシンで計測したもの。
 

        

        
 
#relevantdocs(リリースノート・ソースの入手)
#relevantdocs(リリースノート・ソースの入手)
 

        

        
~
-[[Mono 5.0.0 Release Notes | Mono:http://www.mono-project.com/docs/about-mono/releases/5.0.0/]]
-[[Mono 4.6.2 Release Notes | Mono:http://www.mono-project.com/docs/about-mono/releases/4.6.2]]
-
-[[Mono 4.6.1 Release Notes | Mono:http://www.mono-project.com/docs/about-mono/releases/4.6.1]]
-
-[[Mono 4.6.0 Release Notes | Mono:http://www.mono-project.com/docs/about-mono/releases/4.6.0]]
 
-[[Download | Mono:https://download.mono-project.com/sources/mono/]]
-[[Download | Mono:https://download.mono-project.com/sources/mono/]]
 

        

        
 
#relevantdocs-end
#relevantdocs-end
18,7 20,7
 

        

        
 
#relevantdocs-end
#relevantdocs-end
 

        

        
~
ここで紹介する手順はMono本体といくつかのアセンブリをインストールするためのもの。 ディストリビューションが提供しているバージョンのMonoと共存できるようにするため、``/opt/mono/5.0``にインストールする。
ここで紹介する手順はMono本体といくつかのアセンブリをインストールするためのもの。 ディストリビューションが提供しているバージョンのMonoと共存できるようにするため、``/opt/mono/4.6``にインストールする。
 

        

        
 
#remarks
#remarks
 
1つの環境に複数のMonoをインストールする方法については[[Parallel Mono Environments - Mono:http://www.mono-project.com/docs/compiling-mono/parallel-mono-environments/]]で詳しく解説されている。
1つの環境に複数のMonoをインストールする方法については[[Parallel Mono Environments - Mono:http://www.mono-project.com/docs/compiling-mono/parallel-mono-environments/]]で詳しく解説されている。
29,7 31,7
 
#adunit
#adunit
 

        

        
 
*libgdiplus [#libgdiplus]
*libgdiplus [#libgdiplus]
~
``System.Drawing.dll``など、GDI+の機能を使用する場合のみ。 不要な場合はインストールを省略できる。
``System.Drawing.dll``など、GDI+を使用する場合のみ。 不要な場合はインストールを省略できる。
 

        

        
 
**依存するパッケージのインストール
**依存するパッケージのインストール
 
#code(sh){{
#code(sh){{
43,11 45,11
 
wget https://download.mono-project.com/sources/libgdiplus/libgdiplus-4.2.tar.gz
wget https://download.mono-project.com/sources/libgdiplus/libgdiplus-4.2.tar.gz
 
tar -xvf libgdiplus-4.2.tar.gz 
tar -xvf libgdiplus-4.2.tar.gz 
 
cd libgdiplus-4.2/
cd libgdiplus-4.2/
~
./configure --prefix=/opt/mono/5.0/
./configure --prefix=/opt/mono/4.6/
 
}}
}}
 

        

        
 
#remarks
#remarks
~
Mono 5.0のリリース時点では5.0にバージョン付けされたlibgdiplusはリリースされていないので、libgdiplus-4.2を用いる。
Mono 4.6のリリース時点では4.6にバージョン付けされたlibgdiplusはリリースされていないので、libgdiplus-4.2を用いる。
 
#remarks-end
#remarks-end
 

        

        
 
``configure``の結果例。
``configure``の結果例。
55,7 57,7
 
---
---
 
Configuration summary
Configuration summary
 

        

        
~
   * Installation prefix = /opt/mono/5.0
   * Installation prefix = /opt/mono/4.6
 
   * Cairo = 1.14.6 (system)
   * Cairo = 1.14.6 (system)
 
   * Text = cairo
   * Text = cairo
 
   * EXIF tags = yes
   * EXIF tags = yes
82,18 84,18
 

        

        
 
正しくインストールできたか確認する。
正しくインストールできたか確認する。
 
#prompt{{
#prompt{{
~
$ PKG_CONFIG_PATH=/opt/mono/5.0/lib/pkgconfig pkg-config libgdiplus --modversion
$ PKG_CONFIG_PATH=/opt/mono/4.6/lib/pkgconfig pkg-config libgdiplus --modversion
 
4.2
4.2
 

        

        
~
$ PKG_CONFIG_PATH=/opt/mono/5.0/lib/pkgconfig pkg-config libgdiplus --libs
$ PKG_CONFIG_PATH=/opt/mono/4.6/lib/pkgconfig pkg-config libgdiplus --libs
~
-L/opt/mono/5.0/lib -lgdiplus -lglib-2.0 -lcairo -lfontconfig -lfreetype -lXrender -lX11 -ljpeg -ltiff -lgif -lpng12 -lexif -Wl,--export-dynamic -lgmodule-2.0 -pthread -lgthread-2.0 -pthread -lglib-2.0
-L/opt/mono/4.6/lib -lgdiplus -lglib-2.0 -lcairo -lfontconfig -lfreetype -lXrender -lX11 -ljpeg -ltiff -lgif -lpng12 -lexif -Wl,--export-dynamic -lgmodule-2.0 -pthread -lgthread-2.0 -pthread -lglib-2.0
 
}}
}}
 

        

        
 
#remarks
#remarks
 
libgdiplus-4.2ではpkgconfigで以下のようなエラーが表示される。
libgdiplus-4.2ではpkgconfigで以下のようなエラーが表示される。
 
#prompt{{
#prompt{{
~
$ PKG_CONFIG_PATH=/opt/mono/5.0/lib/pkgconfig pkg-config libgdiplus --libs
$ PKG_CONFIG_PATH=/opt/mono/4.6/lib/pkgconfig pkg-config libgdiplus --libs
~
Variable 'libjpeg_prefix' not defined in '/opt/mono/5.0/lib/pkgconfig/libgdiplus.pc'
Variable 'libjpeg_prefix' not defined in '/opt/mono/4.6/lib/pkgconfig/libgdiplus.pc'
 
}}
}}
 

        

        
 
libgdiplusをMono(System.Drawing.dll)を通して使用する場合はこのまま続行しても問題ない。 直接リンクする場合など、これが問題となる場合はGit masterのlibgdiplus([[programming/mono/build_install/mono_from_git-master#libgdiplus]])を代用する。
libgdiplusをMono(System.Drawing.dll)を通して使用する場合はこのまま続行しても問題ない。 直接リンクする場合など、これが問題となる場合はGit masterのlibgdiplus([[programming/mono/build_install/mono_from_git-master#libgdiplus]])を代用する。
108,43 110,38
 

        

        
 
**ソースのダウンロードとconfigure
**ソースのダウンロードとconfigure
 
#code(sh){{
#code(sh){{
~
wget https://download.mono-project.com/sources/mono/mono-5.0.0.100.tar.bz2
wget https://download.mono-project.com/sources/mono/mono-4.6.2.16.tar.bz2
~
tar -xvf mono-5.0.0.100.tar.bz2
tar -xvf mono-4.6.2.16.tar.bz2
~
cd mono-5.0.0/
cd mono-4.6.2/
~
./configure --prefix=/opt/mono/5.0/ --with-libgdiplus=/opt/mono/5.0/ --with-ikvm-native=no --with-mcs-docs=no --with-x
./configure --prefix=/opt/mono/4.6/ --with-libgdiplus=/opt/mono/4.6/ --with-ikvm-native=no --with-mcs-docs=no --with-x
 
}}
}}
 

        

        
 
``configure``の結果例。
``configure``の結果例。
 
#prompt{{
#prompt{{
 
        mcs source:    mcs
        mcs source:    mcs
+
	C# Compiler:   roslyn
 

        

        
 
   Engine:
   Engine:
 
	Host:	       x86_64-unknown-linux-gnu
	Host:	       x86_64-unknown-linux-gnu
 
	Target:	       x86_64-unknown-linux-gnu
	Target:	       x86_64-unknown-linux-gnu
~
	GC:	       sgen (concurrent by default) and Included Boehm GC with typed GC and parallel mark
	GC:	       sgen and Included Boehm GC with typed GC and parallel mark
 
	TLS:           __thread
	TLS:           __thread
 
	SIGALTSTACK:   yes
	SIGALTSTACK:   yes
 
	Engine:        Building and using the JIT
	Engine:        Building and using the JIT
 
	BigArrays:     no
	BigArrays:     no
 
	DTrace:        no
	DTrace:        no
 
	LLVM Back End: no (dynamically loaded: no)
	LLVM Back End: no (dynamically loaded: no)
+
	Interpreter:   no
 

        

        
 
   Libraries:
   Libraries:
~
	.NET 4.x:        yes
	.NET 4.6:        yes
 
	Xamarin.Android: no
	Xamarin.Android: no
 
	Xamarin.iOS:     no
	Xamarin.iOS:     no
 
	Xamarin.WatchOS: no
	Xamarin.WatchOS: no
 
	Xamarin.TVOS:    no
	Xamarin.TVOS:    no
 
	Xamarin.Mac:     no
	Xamarin.Mac:     no
~
	Windows AOT:     no
	mobile_static:   no
+
	Orbis:           no
+
	Test profiles:   AOT Full (no), AOT Hybrid (no)
 
	JNI support:     
	JNI support:     
~
	libgdiplus:      /opt/mono/5.0/
	libgdiplus:      /opt/mono/4.6/
 
	zlib:            system zlib
	zlib:            system zlib
+
	BTLS:            yes (x86_64)
 
}}
}}
 

        

        
 
#remarks
#remarks
168,9 165,9
 
所要時間は以下のとおり。
所要時間は以下のとおり。
 
#prompt{{
#prompt{{
 
$ time make -j4
$ time make -j4
~
real	9m32.965s
real	4m46.900s
~
user	20m44.452s
user	10m30.052s
~
sys	0m47.596s
sys	0m26.468s
 
}}
}}
 

        

        
 
#relevantdocs(コンパイルに関するドキュメント)
#relevantdocs(コンパイルに関するドキュメント)
200,7 197,7
 

        

        
 
#prompt{{
#prompt{{
 
$ mono -V
$ mono -V
~
Mono JIT compiler version 5.0.0 (Stable 5.0.0.100/9667aa6 2017年  5月 22日 月曜日 20:02:08 JST)
Mono JIT compiler version 4.6.2 (Stable 4.6.2.16/ac9e222 2017年  2月  4日 土曜日 18:17:57 JST)
 
Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com
Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com
 
	TLS:           __thread
	TLS:           __thread
 
	SIGSEGV:       altstack
	SIGSEGV:       altstack
209,15 206,15
 
	Disabled:      none
	Disabled:      none
 
	Misc:          softdebug 
	Misc:          softdebug 
 
	LLVM:          supported, not enabled.
	LLVM:          supported, not enabled.
~
	GC:            sgen (concurrent by default)
	GC:            sgen
 
}}
}}
 

        

        
 
***既に別のバージョンのMonoが存在する環境にインストールした場合
***既に別のバージョンのMonoが存在する環境にインストールした場合
~
新しく``/opt/mono/5.0``にインストールしたMonoを参照できるように、環境変数を設定するスクリプトを用意しておく。
新しく``/opt/mono/4.6``にインストールしたMonoを参照できるように、環境変数を設定するスクリプトを用意しておく。
 

        

        
~
#code(sh,mono-5.0-env){{
#code(sh,mono-4.6-env){{
 
#!/bin/bash
#!/bin/bash
~
MONO_PREFIX=/opt/mono/5.0
MONO_PREFIX=/opt/mono/4.6
 
GNOME_PREFIX=/usr
GNOME_PREFIX=/usr
 
export DYLD_FALLBACK_LIBRARY_PATH=$MONO_PREFIX/lib:$DYLD_LIBRARY_FALLBACK_PATH
export DYLD_FALLBACK_LIBRARY_PATH=$MONO_PREFIX/lib:$DYLD_LIBRARY_FALLBACK_PATH
 
export LD_LIBRARY_PATH=$MONO_PREFIX/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=$MONO_PREFIX/lib:$LD_LIBRARY_PATH
249,13 246,13
 
続いて、先ほど用意したスクリプトを読み込んだあとで``mono -V``を実行し、新しくインストールしたmonoが動作することを確認する。
続いて、先ほど用意したスクリプトを読み込んだあとで``mono -V``を実行し、新しくインストールしたmonoが動作することを確認する。
 

        

        
 
#prompt{{
#prompt{{
~
$ source mono-5.0-env
$ source mono-4.6-env
 

        

        
 
$ which mono
$ which mono
~
/opt/mono/5.0/bin/mono
/opt/mono/4.6/bin/mono
 

        

        
 
$ mono -V
$ mono -V
~
Mono JIT compiler version 5.0.0 (Stable 5.0.0.100/9667aa6 2017年  5月 22日 月曜日 20:02:08 JST)
Mono JIT compiler version 4.6.2 (Stable 4.6.2.16/ac9e222 2017年  2月  4日 土曜日 18:17:57 JST)
 
Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com
Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com
 
	TLS:           __thread
	TLS:           __thread
 
	SIGSEGV:       altstack
	SIGSEGV:       altstack
264,7 261,7
 
	Disabled:      none
	Disabled:      none
 
	Misc:          softdebug 
	Misc:          softdebug 
 
	LLVM:          supported, not enabled.
	LLVM:          supported, not enabled.
~
	GC:            sgen (concurrent by default)
	GC:            sgen
 
}}
}}
 

        

        
 
#relevantdocs(複数のバージョンのMonoを共存させる方法に関するドキュメント)
#relevantdocs(複数のバージョンのMonoを共存させる方法に関するドキュメント)
290,7 287,7
 
}}
}}
 

        

        
 
#remarks
#remarks
~
GACのパスを明示的に指定する場合は-rootオプションで指定する。 例えば``gacutil2 -l -root /opt/mono/5.0/lib/``など)
GACのパスを明示的に指定する場合は-rootオプションで指定する。 例えば``gacutil2 -l -root /opt/mono/4.6/lib/``など)
 
#remarks-end
#remarks-end
 

        

        
 
***mcs(C#コンパイラ)・mono(Monoランタイム)
***mcs(C#コンパイラ)・mono(Monoランタイム)
324,7 321,7
 
4.0.30319.42000
4.0.30319.42000
 

        

        
 
$ csharp -e 'Environment.OSVersion;'
$ csharp -e 'Environment.OSVersion;'
~
Unix 4.4.0.78
Unix 4.4.0.62
 

        

        
 
$ csharp
$ csharp
 
Mono C# Shell, type "help;" for help
Mono C# Shell, type "help;" for help
342,12 339,8
 
ここまでの手順でインストールされるアセンブリの一覧は以下の通り。
ここまでの手順でインストールされるアセンブリの一覧は以下の通り。
 

        

        
 
#prompt{{
#prompt{{
~
$ gacutil2 -l -root /opt/mono/5.0/lib/
$ gacutil2 -l -root /opt/mono/4.6/lib/
~
The following assemblies are installed into the GAC:
The following assemblies are installed into the GAC:                                                     Accessibility, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a                         Commons.Xml.Relaxng, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756                   CustomMarshalers, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a                      I18N, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756                                  
+
Accessibility, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
Commons.Xml.Relaxng, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756
+
CustomMarshalers, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
I18N, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756
 
I18N.CJK, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756
I18N.CJK, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756
 
I18N.MidEast, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756
I18N.MidEast, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756
 
I18N.Other, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756
I18N.Other, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756
373,10 366,8
 
Microsoft.CSharp, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
Microsoft.CSharp, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 
Microsoft.VisualC, Version=0.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
Microsoft.VisualC, Version=0.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 
Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
+
Mono.Btls.Interface, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756
 
Mono.CSharp, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756
Mono.CSharp, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756
 
Mono.Cairo, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756
Mono.Cairo, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756
+
Mono.Cecil, Version=0.10.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756
 
Mono.Cecil, Version=0.9.5.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756
Mono.Cecil, Version=0.9.5.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756
 
Mono.CodeContracts, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756
Mono.CodeContracts, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756
 
Mono.CompilerServices.SymbolWriter, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756
Mono.CompilerServices.SymbolWriter, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756
390,6 381,10
 
Mono.Parallel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756
Mono.Parallel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756
 
Mono.Posix, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756
Mono.Posix, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756
 
Mono.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756
Mono.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756
-
Mono.Security.Providers.DotNet, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756
-
Mono.Security.Providers.NewSystemSource, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756
-
Mono.Security.Providers.NewTls, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756
-
Mono.Security.Providers.OldTls, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756
 
Mono.Security.Win32, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756
Mono.Security.Win32, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756
 
Mono.Simd, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756
Mono.Simd, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756
 
Mono.Tasklets, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756
Mono.Tasklets, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756
504,7 499,7
 
nunit.framework.extensions, Version=2.4.8.0, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77
nunit.framework.extensions, Version=2.4.8.0, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77
 
nunit.mocks, Version=2.4.8.0, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77
nunit.mocks, Version=2.4.8.0, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77
 
nunit.util, Version=2.4.8.0, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77
nunit.util, Version=2.4.8.0, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77
~
Number of items = 160
Number of items = 162
 
}}
}}