ごちゃペディア

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

古い Snes9xで使うライブラリのビルド方法 (zlib, libpng)

2011 年時点の Snes9x 向けの zlib と libpng のビルド手順です。2019 年現在は公式ビルドガイドに沿っていればこういったことを考える必要はありません。

本体のビルドについては、Snes9x のソースコードをコンパイルするをご覧ください。

使用するツールとライブラリ

スタティックライブラリをビルドします。DLLであれば些細なバージョン違いでのエラーは発生しないと思うので、手間なく継続的に開発できるようにするには、DLLとリンクする方が良いかもしれません。

本記事では Snes9x 向けのライブラリをビルドするので、文字コード(MBCS/Unicode 両サポート)周りで通常のビルドとは異なる手順を必要とします。

コンパイル手順

前準備
  1. zlib と libpng のソースコードをダウンロードして展開する
  2. libpng/projects/vstudio/zlib.props を開いて、ZLibSrcDir を修正する(相対指定は zlib.vcxproj からの相対位置になる)
  3. zlib/contrib/masmx86/bld_ml32.bat を開いて、ml のオプションに /safeseh を追加する(/safeseh 追加の参考
  4. 修正したらソリューション vstudio.sln を開いて、デフォルト設定のビルドが成功することを確認する
Win32 ビルド

*** 最適化及びデバッグオプションの統一

[Debug Library] [Release Library] のオプションを、zlib, libpng についてそれぞれ変更する。

  • 最適化オプションを Snes9x と揃える([ランタイム オプション])
  • [C/C++]-[デバッグ情報の形式] を Snes9x と揃える
  • [全般]-[ターゲット名] を出力したいファイル名に設定する
  • [全般]-[文字セット] を [マルチバイト文字セットを使用する] あるいは [設定なし] にする
  • [C/C++]-[出力ファイル]-[プログラム データベース ファイルの名前] をなど出力したいファイル名に設定する(コンパイル後のリネーム厳禁)(例: $(OutDir)$(TargetName).pdb)。

*** zlib コンパイルの修正

  • 「error LNK2001: unresolved external symbol _gzclose」への対策を行う
    • zlib プロジェクトに gzclose.c, gzlib.c, gzread.c, gzwrite.c を追加する
    • [C/C++]-[プリプロセッサ]-[プリプロセッサの定義] から Z_SOLO を削除する
    • [C/C++]-[全般]-[警告をエラーとして扱う] を「いいえ」に設定する

以上を設定後、libpng プロジェクトをリビルドする。

x64 ビルド

Win32 ビルドの構成を複製するので、ビルド設定を完了後に実施してください。

  • メニュー [ビルド]-[構成マネージャー] を開いて、Win32 構成を元に x64 構成を新規作成する
  • 出力ファイル名を適宜変更する

以上を設定後、libpng プロジェクトをリビルドする。

Unicode ビルド

Cランタイム関数の呼び出しをUnicode版に差し替えることで、Unicode サポートを実現します。

  • [全般]-[文字セット] を [Unicode 文字セットを使用する]に設定する
  • snes9x/win32 ディレクトリの _tfwopen.cpp を zlib, libpng プロジェクトに追加する
  • snes9x/win32 ディレクトリの _tfwopen.h をインクルードパス上に配置する
  • [C/C++]-[詳細設定]-[必ず使用されるインクルード ファイル] に _tfwopen.h を追加する
  • [プリコンパイル済みヘッダー] を使用しない設定に変更する
その他

ライブラリのビルド以外における留意事項です。

  • libpng/scripts/pnglibconf.h.prebuilt を pnglibconf.h にリネームして snes9x の所定ディレクトリに配置する

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

以下はとても古い時代に書かれた記事です。最新の Snes9x は CI で自動ビルドされています。バイナリがほしいだけなら自分でビルドする必要もありません。それでも自分でビルドしたい方は公式なビルドガイドを参照してください。この記事を執筆した当時と比べてずっと簡単です。

当時のコード向けのビルド済みの依存ライブラリファイルをおいておきます。

続きを読む

LuaでTwitterにpost!

LuaスクリプトTwitterにツイートを投稿する手順をお教えします!

半年前に同じ記事を書いたときはBasic認証を利用していましたが、Basic認証は廃止されてしまいました。そこで今回はOAuth認証を行うことにします。

基本的にはignacioさんのLuaOAuthをそのまま利用して実現しています。この場を借りてお礼申し上げます。

OAuth認証して投稿するための手順

OAuth認証と言われてもぴんとこない人もいるかもしれませんが、ある程度Twitterを使っている人なら、下の画像のような「拒否する」「許可する」の画面を一度は見たことがあると思います。

今回、Luaからツイートできるようにするために、事前にこのような認証を完了しておかねばなりません。

本記事でのツイート完了までの大まかな道のりはこんな感じです。

  1. アプリケーションの存在をTwitterに登録し、Consumer keyを取得
  2. Consumer keyをキーに生成される認証URLにブラウザでアクセスして認証し、暗証番号を取得
  3. 認証で得た暗証番号をTwitterに送信し、OAuth tokenを取得
  4. OAuth tokenを利用してツイートを送信(2度目以降はこの手順だけで良い)
続きを読む

EmuLuaでTwitterるわ!

Basic認証が廃止されてしまったので、以下の内容は現在利用できません。こちらをご覧ください→LuaでTwitterにpost!

LuaでTwitterるわ! という素晴らしい記事がありますので,流用してemutweet.luaのようなスクリプトを書けば,簡単にTwitterに追記回数キリ番記念postとかできちゃいます! おしまい!

……と言いたいところですが,実際の利用にあたってはいくつかのハードルが並んでいるのでちょっとまとめておきます.

続きを読む