ごちゃログぴこっ

はなまるデジタル創作紀行(DTM、TAS、いろいろな技術)

Snes9x のソースコードをコンパイルする

本記事では GitHub にある Snes9x (snes9xgit) のビルド方法(Windows)をガイドします。私自身は Snes9x との関わりが薄れてきていますが、今後しばらくは有用な情報として生きるのではと思います。

Snes9x Git (公式リポジトリ)
https://github.com/snes9xgit/snes9x
Snes9x Rerecording (上記リポジトリの fork)
https://github.com/snes9x-rr/snes9x

どうやってビルドするの?(Windows版)

執筆時現在、ビルド方法は公式に snes9xgit/win32/docs/how2compile.txt で説明されているので、メンテナンスが続く限りは、こちらを参照するのが最も信頼できそうです。

以後、執筆時時点の情報に基づいてビルドしてみます。

snes9xgit/snes9x のプロジェクトページの「Clone or download」をクリックして、ソースコード一式を入手します。

継続的に開発に関わる場合は Git リポジトリをクローンすることをおすすめします。Git の詳細はサルでもわかるGit入門などをご覧ください。

依存ライブラリの追加

snes9x/win32/snes9xw.sln を Visual Studio で開いてビルドするだけ! とはいきません。コンパイルに必要な各種ライブラリはリポジトリに配置されていないからです。

以下、必要なライブラリです。(執筆時点から変更されている可能性にご注意ください。最新の情報は snes9x/win32/docs/how2compile.txt に反映されている可能性が高いです)

ライブラリに関するいくつかの注意があります。

  • 最新のDirectX SDKを導入すると、「fatal error LNK1104: cannot open file 'ddraw.lib' 」と言われてリンクできません。Feb 2010 以前のバージョンを導入すると解決できます。
  • 最新のFMOD Exを導入すると、「FMOD_OUTPUTTYPE_OPENAL が定義されていません」と言われます。FMOD_OUTPUTTYPE_OPENAL は2010年7月1日に削除されたようなので、最新版の代わりに 4.30.14 stable を導入することで解決できます。
  • Unicode版で「error C2065: 'ICustomDestinationList' : 定義されていない識別子です」というエラーが出る際は古いWindows SDKのヘッダファイルが読み込まれています。VS2008でWindowsSdkDirの値が正しくないなどの問題の影響の可能性があります。最新のSDKを導入し、Windows SDK Configuration Tool などでパスも適宜修正しましょう。
  • 最新のDirectX SDKを導入すると、リンクの際に「DxErr9.libが見つかりません」と言われます。これはCDirect3D.cppの#pragmaの記述を #pragma comment( lib, "DxErr9" ) から #pragma comment( lib, "DxErr" ) に変更することで解決できます*1

改良を本家にマージ依頼する(プルリクエストについて)

かつて Snes9x の開発はあまりオープンではなかったので「Snes9x.com Forum に diff を貼って説明を」などと言われたりしましたが、GitHub の一員となったいま、マージ依頼の手順は一般的な GitHub プロジェクトと何ら違いはありません。

参考: github初心者がPull Requestを送ってみた時の手順

どうしてもよくわからなければ、Issues にチケットを作成して、そこにパッチを貼るという古典的な方法もありだと思います。

*1:「DXERR9ライブラリはDirectX SDK August 2009で削除されました」とのことなので、最新のDirectX SDKではなく DirectX SDK (March 2009) を利用することでも解決できます。