nazolabo

フリーランスのWebエンジニアが近況や思ったことを発信しています。

実際にやってみよう(Visual Studio 2005 Express EdiotionでSecond Life Viewerをビルド)

この記事は2007年1月10日時点の内容です。ソースコードのバージョンも公式のWikiの内容も当時から変わっているので、この記事は参考程度にすることをお勧めします。


また僕はSecond Lifeのアカウントを持っていないので、タイトル画面以降の動作は一切確認していません。

まずはこれから。
http://secondlife.com/developers/opensource/getit
から、SourceとThird Party Support Librariesをダウンロードして解凍。

  • VS2005 Expressのダウンロード&インストール

http://www.microsoft.com/japan/msdn/vstudio/express/visualc/
日本語版でも大丈夫だよね?
Alcohol 52%(http://gigazine.net/index.php?/news/comments/20060921_alcohol52/)とかでISOからインストールしてみた。

Express版はこれがないと何もできない
http://www.microsoft.com/downloads/details.aspx?familyid=0BAF2B35-C656-4969-ACE8-E4C0C0716ADB&displaylang=en

http://www.microsoft.com/downloads/details.aspx?FamilyID=9216652f-51e0-402e-b7b5-feb68d00f298&displaylang=en
何も言わず入れておこう。
入れたらVC++(以下IDE)のほうの「ツール」-「オプション」の「プロジェクトおよびソリューション」-「VC++ ディレクトリ」で、PlatformSDKとDirectXSDKのincludeとlibをそれぞれ追加。
というかここまではやってあったので、次からがメイン。

  • ActivePython

あっちの人はPython好きねぇ
http://www.activestate.com/Products/ActivePython/?mp=1
からダウンロード。途中で名前とか入力欄が出るけど無視でおk

  • ActivePerl

Perlも使うらしい。
Pythonと同じ。
http://www.activestate.com/Products/ActivePerl/?mp=1
なんとなくASにしてみたけど、MSIのほうが楽だと思う

http://www.cygwin.com/
必要なのはpatchutil, flex, bisonの3つ(devel以下にある)。他はどうでもいい(と思う。依存関係にあるのは勝手にインストールされる)
ちなみにpatchutil(patchutilsか?)は名前通りパッチファイルを操作するものらしい
flexとbisonは組み合わせて、パーサジェネレータ(スクリプトコンパイラを生成するもの)として使う
必ず「C:\cygwin\」にインストールしてください。(理由は後述)

  • FMOD

音関連のライブラリ?Wii版とかもある。
http://www.fmod.org/ifmoddownload.html
FMOD 3.75 Programmers API(FMOD Exじゃないよ!)のWin32版をダウンロード
zipを解凍したら、

Copy "fmodapi375win\api\inc\fmod.h" to "libraries\include"
Copy "fmodapi375win\api\inc\fmod_errors.h" to "libraries\include"
Copy "fmodapi375win\api\lib\fmodvc.lib" to "libraries\i686-win32\lib_release"
Copy "fmodapi375win\api\lib\fmodvc.lib" to "libraries\i686-win32\lib_debug"
Copy "fmodapi375win\api\fmod.dll" to "indra\newview" 

とする。librariesとかindraとかはSecond Lifeのソースコードを解凍したフォルダ内の。

  • OpenGL

http://oss.sgi.com/projects/ogl-sample/sdk.html
開いたページにある〜.h3つをダウンロード。
libraries\i686-win32\include\GL
に入れる。

動画とか再生できるの?
http://developer.apple.com/quicktime/download/
からダウンロード。要会員登録(sign up)。めんどい。
インストールしたら

Copy "QuicktimeSDK\Libraries\QTMLClient.lib" to "\libraries\i686-win32\lib_release".
Copy "QuicktimeSDK\Libraries\QTMLClient.lib" to "\libraries\i686-win32\lib_debug".
Copy the contents of "QuicktimeSDK\CIncludes" into "\libraries\i686-win32\include\quicktime". 

とする。
Copy the contentsってのはフォルダ毎ってことだろうけど、"\libraries\i686-win32\include\quicktime"ってフォルダはないので、CIncludesをincludeにそのままコピーしてリネームするといいと思う。

  • 環境設定

ソースコードフォルダの
\indra\indra_complete\indra_complete.sln
を開く。
変換ウィザードとか出てくるけどそのまま完了で。(バックアップを作るかしか聞かれない)
ソリューションエクスプローラ(左側ペイン)から、newviewを右クリックで「スタートアップ プロジェクトに設定」する。
ソリューションエクスプローラに羅列されてる全プロジェクト(lscript_compile_fbは設定項目自体がないので無視)を1つずつ、設定を変更していく。(一度に全部変更はできないのでめんどい)
それぞれ右クリックで「プロパティ」で、構成を「すべての構成」にして、

    • 「構成プロパティ」-「C/C++」-「全般」の「警告をエラーとして扱う」を「いいえ」に
    • 「構成プロパティ」-「C/C++」-「プリプロセッサ」の「プリプロセッサの定義」の末尾に「;_CRT_SECURE_NO_DEPRECATE」を追加(ここだけは「すべての構成」では無理なので、各構成毎に追加していくしかない。「すべての構成」のままやると、他の設定が消えてしまうので注意)
    • 「構成プロパティ」-「C/C++」-「言語」の「wchar_tをビルトイン型として扱う」を「いいえ」に

する。

解説するまでもないからWikiのほう見て。
フォルダ構造で指示されてるから、IDEのほうじゃなくてフォルダから直接参照したほうがやりやすいと思う。
やっててわかるけど、キャスト絡みがほとんどっぽい。
Misc. Code Editingってのはしなくてもいい。

  • Boost Regexのリビルド

http://sourceforge.net/project/showfiles.php?group_id=7586&package_id=8041
から1.33.1(最新)のzipをダウンロードして解凍。コマンドプロンプトから操作するので、C:\直下とかに置くと楽。
スタートメニューから「Visual C++ 2005 Express Edition」-「Visual Studio Tools」-「Visual Studio 2005 コマンド プロンプト」を実行。(普通のコマンドプロンプトと違って、Visual Studio用の環境変数設定とかがされてる)

cd boost_1_33_1\libs\regex\build\

し(boost_1_33_1は解凍したフォルダ)

nmake -fvc8.mak

する。長いのでコーヒーでも飲んで待ってね☆ミ
と思ったけど、

..\..\..\boost/regex/v4/fileiter.hpp(44) : fatal error C1083: include ファイルを開けません。'windows.h': No such file or directory

とか出ちゃうので、Wikiに書いてある通り

set INCLUDE=C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Include;%INCLUDE%
set LIB=C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Lib;%LIB%

する。(ぼくの場合は古いせいか「C:\Program Files\Microsoft Platform SDK\以下」だった)
再びコーヒーを飲んで待つ。別に飲まなくてもいい。
warning出てる気がするけど気にせず、出来上がったものを

Copy "boost_1_33_1\libs\regex\build\vc80\libboost_regex-vc80-mt-s-1_33_1.lib" to "\linden\libraries\i686-win32\lib_release\libboost_regex-vc80-mt-s-1_33_1.lib"
Copy "boost_1_33_1\libs\regex\build\vc80\libboost_regex-vc80-mt-s-1_33_1.lib" to "\linden\libraries\i686-win32\lib_debug\libboost_regex-vc80-mt-s-1_33_1.lib" 

する。似た名前が多いから気をつけよう。
IDEに戻って、ソリューションエクスプローラからnewviewを選択し、右クリックで「プロパティ」で、各構成の
「構成プロパティ」-「リンカ」-「入力」の「追加の依存ファイル」の中から「libboost_regex-vc71-mt-s.lib」を「libboost_regex-vc80-mt-s-1_33_1.lib」に書き換える。目が痛くなる。横の...ボタンを押すと楽。

  • llMozlibを無効化
linden\indra\llcommon\llpreprocessor.h @ line 51
--51: #define LL_LIBXUL_ENABLED		1
++51: #define LL_LIBXUL_ENABLED		0

だそうです。

  • ビルド

ReleaseNoOpt(デバッグ用)かReleaseForDownload(リリース用)の構成を選択してビルド。これまた長い。
(数分経過)
あのーエラーが出るんですけどぉー
よく追ってみたら、CygwinをE:\cygwinにインストールしてたので、パスが見つからないって話だった。
めんどいのでlinden\indra\lscript\lscript_compile\lscript_compile_fb.vcprojを直接テキストエディタで書き換え。
まだ動かない。
なんかcopyコマンドを叩いてるっぽいので、作業フォルダが悪いのかと思い(恐らく全角かスペース混じりのフォルダ名を考慮されていない)、ルート直下に丸ごと移動して作業してみた。
ビルドは通ったけど、起動しない。
どうにも落ちるので、落ちるところを見てみると
linden\indra\llcommon\llstring.cpp

	// craziness to make gcc happy (llutf16string.c_str() is tweaked on linux):
	const U16* chars16 = &(*(utf16str.begin()));

なんじゃそりゃ!
仕方ないので、書き換え。std::stringの実装が違うのかな。実はSTLPortでも使ってるとかってオチだろうか。

--201: const U16* chars16 = &(*(utf16str.begin()));
++201: const U16* chars16 = &(*(utf16str.c_str()));

これで起動した。
※Wikiのほうも少しずつ修正されているようです。Wikiのほうと比較しながら作業を進めることをお勧めします。