Compiling the viewer (MSVS2005)/ja

このページでは、Visual Studio 2005またはVisual C++ Express 2005を使ってMicrosoft Windows用にビューアをコンパイルする方法を説明します。リンデン自身はVS2003を使っているため、設定手順などはVS2003の方が簡単です。もしもVisual Studio 2003が使えるのであれば、Microsoft WindowsでVisual Studio .NET 2003を使う場合に従う方が、VS2005でコンパイルするよりも問題が起きにくいでしょう。
今のところ、32ビットのバイナリしかテストされていません。ビューアの64ビットWindows用の .EXEを作る試みもあるようですが。もしもやってみたならば、結果をこのwikiサイトに書いてください (成功しても、しなくても!)
以下の説明は、ビューアのリリース1.16.0.5以降を前提にしています。リリース1.15以前のコンパイル手順が知りたい場合は、このページの古い版を参照してください。
= 開発環境の準備 =
== VS2005のインストールと設定 ==
必要となるコンパイラとMicrosoftの開発ツールは次の通りです。
* Visual Studio 2005またはVisual C++ 2005 Express(無料)が必要です。英語版でも日本語版でもかまいません。(更に、絶対必要というわけではありませんが、VS2005のSP1も入手してインストールした方がいいでしょう。)
* 加えてMicrosoft Platform SDKが必要です。
* DirectX 9.0 SDKの2003年夏以降のリリースが必要です。例えばDirectX 9.0 SDK (December 2006)。
: 注: Direct X 9.0 SDKを古いバージョンから更新する場合には、はじめに古いバージョンをアンインストールして完全に取り除きましょう。(コントロールパネルの「プログラムの追加と変更」でアンインストールできます。) 新しいバージョンを上書きインストールすると、後でいろいろと問題が起きます。
* インストールしたら、プロジェクトグローバルを次の手順に従って設定してください。
** Visual Studio 2005またはVisual C++ Express 2005を起動します。
** Tools > Options > Projects and Solutions > VC++ Directories を開きます。
** Include files (画面例) とLibrary files (画面例) の両方とも、先頭にPlatform SDKのパスがあり、その直後にDirectX SDKのパスがあり、Visual C++のパスは更にその後に書いてあるようにしてください。
** もしもDirectX SDKのパスが見当たらない場合は、Include filesとLibrary filesの両方にDirectX SDKのパスを追加することを忘れないようにしてください。
*: 注: 最近のDirectX SDKでは、libフォルダの下にx64とx86という名前の二つのサブフォルダがあります。Library filesにDirectX SDKのパスを指定するときには、libではなく、lib/x86を指定してください。そうしないと、リンクエラーが発生します。
== その他の開発ツールの入手 ==
他に、オープンソースの開発ツールがいくつか必要になります。
* Cygwin
** cygwinのsetupユーティリティを使ってインストールしますが、このときにpatchutils、flex、bisonの三つをインストールするように指定してください。これはすべてdevelの下にありますが、デフォルトではインストールされません。
** ビューアのプロジェクトファイルの中には、cygwinのインストールディレクトリとしてC:\cygwinが固定的に書き込まれている部分があります。そこで、cygwinは、デフォルト通りC:\cygwinにインストールすることを勧めます。もしも別のディレクトリにインストールすると、すべての参照箇所を探して書き直さなければならなくなります。
* ActivePythonの2.3x以降 (最新版はVersion 2.5.1.1のようです。)
** 古いバージョンのビューアでは、Pythonは必要不可欠ではありませんでした。しかし、1.18以降では、原則としてPythonが必要になりました。しかし、Pythonをインストールしたくないなら、インストールしないで済ませることもできます。インストールしたくなければ、VWR-1267を参照してください。
* ActivePerl
** 以前の説明では、ActivePerlが必要と書かれていました。しかし実際は、ビューアのコンパイル自体には、Perlは必要ありません。Perlは、外部ライブラリをコンパイルする場合にだけ必要になります。(普通は、外部ライブラリを自分でコンパイルする必要はありませんから、ActivePerlのインストールも不要です。)
= ソースをダウンロードする =
ビューアのソースファイルは、ソースのダウンロードのページからダウンロードできます。バージョン管理レポジトリを使うこともできます。
最低必要なのは、ソースのパッケージとアートワークのパッケージですが、最初は、ライブラリアーカイブも入手した方がいいでしょう。ライブラリは他のサイトからバイナリをダウンロードしたり、ソースを入手して自分でコンパイルしたりできます。しかし、それには何時間もかかるので、リンデンがコンパイルしたライブラリのパッケージを一緒にダウンロードするのが最も簡単です。
警告:
* SLのソースを保存するディレクトリのパスの途中に空白が含まれていると、message_template.msgをコピーするバッチファイルが誤動作します。つまり、例えば、"C:\Projects\Dir with space in name\Linden" のようなディレクトリにソース一式をzipファイルから解凍したり、チェックアウトしたりすると、うまくいきません。
* パスにASCII以外の文字 (各国語文字) を使うのも避けた方がいいでしょう。各国語化されたツールの中には、デフォルトでASCII以外の文字を含んだパスを作るものがあるので注意してください。
* ソース一式の解凍先やチェックアウト先は、できるだけフルパスが短いディレクトリにしましょう。長いパスは、ときどき、予想できないトラブルを起こすことがあるからです。
はっきり言えば、手っとり早くコンパイルをするためには、source (ソース)、artwok (アートワーク)、libraries (ライブラリ) の三つをソースのダウンロードのページから入手して、三つとも同じディレクトリに解凍し、そのディレクトリもできるだけルートに近いところにある短い名前のもの、たとえば "C:\sl_1_16_0_5" のようなディレクトリを選ぶのがいいでしょう。
= ライブラリについて =
SLビューアは、第三者が供給するライブラリ群を利用しています。そのうち、いくつかはオープンソースですが、すべてがそうではありません。
== オープンソースのライブラリ ==
オープンソースのライブラリは、リンデンによってコンパイル済みのものをダウンロードすることができます。ソースのダウンロードのページにあります。これをダウンロードした場合は、ディレクトリの構造を変更しないように注意して、SL viewrのソースを格納したディレクトリに解凍します。
注意: ソースのダウンロードのページにあるライブラリは、基本的にVS2003用であり、VS2005でコンパイルしたバイナリとの組み合わせで完全に動作するわけではありません。VS2005でコンパイルすることはできますが、VS2003のライブラリはSTLの規則を守っていません。 Microsoft Visual Studio の非標準の振る舞いの差異が、原因の一つであることがわかっています。
別の方法として、ライブラリのソースファイルを入手して自分でコンパイルすることが可能かもしれません。挑戦する場合にはVS2003ユーザのための手順が参考になるでしょう。ただし、このライブラリ群をVS2005でうまくコンパイルできるのかどうか、はっきりしていません。それでもやるなら、ご自由に。(それで、もしもうまくできたら、ぜひこのwikiにやり方を書いてください…。)
== オープンソースでないライブラリ ==
リンデンは、以下に示すオープンソースでないライブラリをダウンロードに含めていません。指示に従って入手し、ソースディレクトリにコピーする必要があります。
ここで、ソースディレクトリに個々のライブラリのファイルを上書きするのではなく、空のディクトリ構造を用意して、ダウンロードしたオープンソースでないディレクトリをいったんそこにコピーし、その後、ディレクトリ構造全体をソースディクトリにコピーするといいでしょう。(例えば、XCOPY OLIB SL_1_16_0_5 /S のようにして。) なぜかと言うと、オープンソースでないライブラリのファイルを適切なディクトリにコピーするのはめんどうな作業ですが、個々のリリースごとのソースファイルを別のディクトリに保存しておくのをやめない限り、新しいリリースが出るたびに毎回繰り返さなければならないからです。このやり方がいやであれば、もちろん、ソースディレクトリにオープンソースでないライブラリのファイルを直接コピーしてもかまいません。
 rem オープンソースでないディレクトリをいったんコピーするために必要な空のディレクトリ構造を作る OLIBS.CMD というファイル
 md olibs
 md olibs\linden\
 md olibs\linden\libraries
 md olibs\linden\libraries\include
 md olibs\linden\libraries\i686-win32
 md olibs\linden\libraries\i686-win32\lib_release
 md olibs\linden\libraries\i686-win32\lib_debug
 md olibs\linden\libraries\i686-win32\include
 md olibs\linden\libraries\i686-win32\include\GL
 md olibs\linden\libraries\i686-win32\include\quicktime
 md olibs\linden\indra
 md olibs\linden\indra\newview
=== Fmod ===
* fmod 3.75 for win32 をダウンロードして解凍。(3.75より新しい版、例えば FMOD EX などは使えません。)
* "fmodapi375win\api\inc\fmod.h"を"linden\libraries\include"にコピー。
* "fmodapi375win\api\inc\fmod_errors.h"を"linden\libraries\include"にコピー。
* "fmodapi375win\api\lib\fmodvc.lib"を"linden\libraries\i686-win32\lib_release"と"linden\libraries\i686-win32\lib_debug"との両方にコピー。
* "fmodapi375win\api\fmod.dll"を"linden\indra\newview"にコピー。
=== OpenGL ===
* glext.h、glxext.h、wglext.hをダウンロード。
* ダウンロードしたファイルを"linden\libraries\i686-win32\include\GL"にコピー。
* OpenGLに関して、*.lib とか *.dll とかをダウンロードする必要はありません。
=== QuickTime (省略可能) ===
注: Quicktimeをダウンロードするためには、Apple社のウェブサイトで開発者としての登録を行う必要があります。SLビューアは、QuickTimeを使わずにコンパイルすることもできます。詳しくは後述します。ただし、QuickTimeを使わないでコンパイルしたビューアは、SL内で動画を再生できません。
* Quicktime SDK for Windowsをダウンロードしてインストール。
* "QuicktimeSDK\Libraries\QTMLClient.lib"を"linden\libraries\i686-win32\lib_release"と"linden\libraries\i686-win32\lib_debug"との両方にコピー。
* "QuicktimeSDK\CIncludes"の下にある全てのファイルを"linden\libraries\i686-win32\include\quicktime"にコピー。
= VS2005の設定 =
リンデン社では、Windows版のビューアの開発にVS2003を使っています。
VS2005を使ってコンパイルするためには、ソリューションファイルとプロジェクトファイルの両方をVS2003形式からVS2005形式に変換して設定を調整するか、または、VS2005用のファイル一式をソースファイルと別に入手する必要があります。
注: ソースファイルのアーカイブには、"linden\indra\indra_complete_vs8.sln"というVisual Studio 2005用のソリューションファイルが含まれていますが、このファイルは使い物になりません (少なくとも、1.14.0から1.18.2までのバージョンでは)。将来リンデン社が、_vc8ファイルを適切に更新する気を起こせば、この状況は変わるかもしれません。
== 設定済みのソリューションファイルとプロジェクトファイルを使う ==
現在、JIRAバグトラッカのに対する添付ファイルとして、ソリューションファイルとプロジェクトファイルをいれたZIPファイルがアップロードされています。
バージョン1.16以降では、MS2005でビューアをコンパイルするためには上述のZIPファイルを使うのが簡単です。詳しい手順は、次の通りです。
* JIRAから、適切なZIPアーカイブをダウンロードします。
* アーカイブを解凍し、ソースディクトリに内容をコピーします。(ファイル名に_vc8がついているファイルを上書きします。)
* Visual Studio 2005またはVisual C++ Expressを起動します。
* プルダウンメニューから"File > Open > Project/Solution"を選んで、linden\indra\indra_complete\indra_complete_vc8.slnを開きます。(このとき、もしも将来同じディレクトリで別のバージョンをコンパイルするつもりならば、ファイルを開く前に、indra_complete_vc8.slnを別の名前 (例えばindra_1_17_0_11_vc8.sln) に変更していくといいかもしれません。)
* Solution Explorerで、newviewを右クリックし、"Set as StartUp Project"を選びます。
* 自分で変換するを飛ばして、#その他の対策に進みます。
注: ソリューションファイルやプロジェクトファイルは、ビューアのバージョンによって内容が異なります。ビューアの特定のバージョンをコンパイルしようとしていて、にそのバージョン用のZIPファイルが見当たらなければ、最も近いバージョン用のものを試してください。コンパイル中にエラーが出たり、プロジェクトの読み込みで問題が起きたり、コンパイルできたとしても何か変なことが起きたならば、自分で変換する必要があるかもしれません。
== ソリューションファイルとプロジェクトファイルを自分で変換する ==
ソリューションファイルとプロジェクトファイルを、VS2003形式からVS2005形式に自分で変換する場合には、別のページ (Converting_project_files_for_MSVS2005) にやりかたが書いてあります。変換には、おおむね5分～15分くらいかかります。必要な時間は、あなたがどの程度VS2005の操作に馴れているのかによって大きく変わります。
== その他の対策 ==
VS2003とVS2005の間の互換性や、その他の問題が、他にもあります。次のような対策が必要になるかもしれません。
=== test、crush_logger、updater ===
何らかの理由により、testプロジェクトはVS2005ではうまく働きません。対策は、testプロジェクトを無効に設定することです。testを右クリックして、Unload Projectを選択します。
他の人がダウンロードできるような完全な一式をビルドしようというつもりがなければ、win_crash_loggerとwin_updaterというプロジェクトを、無効にすることもできます。ただし、これらのプロジェクトを無効にしてnewviewのプロジェクトの依存性から取り除かずにおく場合には、注意が必要です。それは、リンクの時点でVS2005が誤動作する場合があるからです。
=== QuickTimeを使わない ===
Apple社のQuickTime SDKを使いたくなければ、以下の手順によって、QuickTimeを使わないように変更できます。
* ファイル linden\indra\llcommon\llpreprocessor.h の58行目付近 (#elif LL_WINDOWSの下) を、以下のように書き換えます。
 (旧) #define LL_QUICKTIME_ENABLED	1
 (新) #define LL_QUICKTIME_ENABLED	0
* ツールバーの下にある緑色の矢印の隣のSolution ConfigurationというドロップダウンボックスからReleaseNoOptを選び、Solution Explorerで、以下のように操作します。
** newviewをクリックして選択します。
** 右クリックして、Propertiesを選びます。
** Configuration Properties > Linker > InputにあるAdditional Dependenciesの左側をクリックし、右端に"..."と書かれたボタンを表示させ、そのボタンをクリックします。
** リストをスクロールし、qtmlclient.libと書かれた行を見つけ、その行を削除します。
** OKをクリックし、"Additional Dependencies"ダイアログボックスを閉じます。さらにOKをクリックして"newview Property Pages"ダイアログボックスを閉じます。
* Solution ConfigurationsドロップダウンボックスからReleaseForDownloadを選び、newviewをクリックするところから始めて上と同じ操作をもう一回繰り返します。
= コンパイルして実行 =
== ビルド ==
* ReleaseNoOpt (デバッグ用) またはReleaseForDownload (通常実行用) のどちらかをコンパイルします。
* ツールバーの下にある緑色の矢印の隣のSolution Configurationドロップダウンボックスから、どちらかを選びます。
* newviewがアクティブなプロジェクトになっていることを確認します。(アクティブになっていなければ、newviewの右クリックして設定してください)
* メニューのBuildからBuild Solutionを選ぶか、またはF7を押します。
* 成功すると、linden\indra\newview\ReleaseNoOptにnewview_noopt.exeができるか、または、linden\indra\newview\ReleaseForDownloadにSecondLife.exeができます。
== コンパイルエラー ==
* Common compilation problemsを見てください。
== 実行する ==
* Visual StudioのDebugメニューからStart DebuggingかStart Without Debuggingを選ぶと実行できます。
* Visual Studioを使わずに、できたビューアを実行するためには、適当な場所にSecondLife.exeへのショートカットを作り、開始する場所としてlinden\indra\newviewを指定します。
* 代わりに、できあがった exeファイルを "C:\Program Files\SecondLife"フォルダにコピーする方法もあります。
== コンフィグレーション ==
* 普通はReleaseNoOptかReleaseForDownloadのコンフィグレーションを使います。
* ReleaseNoOpt (最適化しない) というコンフィグレーションは、コンパイル時間が短く、デバッグ用の情報が付加され、実行の性能が低下します。ReleaseForDownloadと比べてFPSが約50%ほど下がります。
* ReleaseForDownloadというコンフィグレーションは、デバッグ用の情報が付加され、デバッガで実行するのに適していますが、ある種の局所変数へのアクセスは失われます。
* ReleaseNoOpt では、ビューアを起動すると、ビューアのウィンドウとは別にデバッグコンソールウィンドウが開き、実行中ずっと開いたままになりますが、他のコンフィグレーションであってもShift + Ctrl + 4 を押せば同じ情報を参照できます。
* newview、Properties、Debugging、Command line argumentsで "2>secondlife.log" をコマンド行引数に追加すれば、前述のデバッグログをファイルに格納することもできます。
* Debugコンフィグレーションをビルドした人はFinding_leaksを参照してください。
== うまく実行できないときは ==
* Inventory errors : インベントリの内容を読み込んでいるときにエラーが出るようなら、Help:Stuck logging inを見てください。
* Missing smime3 DLL : smime3.dllはビューアに内蔵されたウェブブラウザの一部です。このエラーを無視してもビューアのほとんどの機能は動作します。エラーが出ないようにするためには、リンデン社の公式ビューアのバイナリをインストールして、そのインストールディレクトリから、"smime3.dll"、"nss3.dll"、"softokn3.dll"、"ssl3.dll"というファイルを"linden\indra\newview"にコピーしてください。
* Can't connect : デバッグ用にビルドすると、ログイン画面の右下に接続するグリッドを選択するドロップダウンボックスが追加されます。メイングリッドはAgni、ベータグリッドはAditiです。(この選択を処理するプログラムにはバグがあって、選択を変更した場合はいったんビューアを終了させて再起動しなければ、望みのグリッドに接続できない、という意見もあります。)
= パッチを投稿する =
ソースを修正して、パッチを投稿したくなった場合は、Submitting patchesを参照してください。