Lua
VisualStudio
cocos2d-x

[Cocos2dx 3.10]Lua projectでReleaseビルドするとクラッシュする【VS 2015】

More than 1 year has passed since last update.

今は亡きCocosStudioやIDEと連携しプロジェクトを作ってくれる「Cocos」

cocos.png

今はサポート終了となり公式ページから消え、Cocos CreatorとかいうただのUnityの下位互換みたいなソフトが鎮座している。

もともとCocos2dxは純粋なC++オープンソースフレームワークである。最悪自分の手でフレームワークのデバッグをすればいいくらいの気持ちで望めるほどの透明性、そして拡張性を備えたフレームワークとして、非オープンソースのUnityとは差別できていた。

にもかかわらず結局Cocos Creatorが非オープンソースの開発キットと成り果ててしまったせいで、まったく差別化ができていない。Cocosを選択する意味がまるでない。正直自分でUnity一強状態のレッドオーシャンに飛び込んでいくCocosの姿勢にはついていけない。

愚痴はこの程度にして、このCocosを使ってLua Projectを作り、Visual Studioから実行すると、Exeファイルがないなどと言われて実行できない。

あるいは、実行できるが意味のわからないところでクラッシュする。

実行できるがクラッシュする場合


  1. 意味のわからないところでstd::bad_alloc例外が送出される

  2. ファイルを編集しても実行バイナリに変更が反映されない

  3. DebugモードでビルドしなおしてからReleaseに戻すと反映される

  4. ファイルを編集するたびにデバッガがファイルのチェックサムが一致しないとか文句を言ってくる。

という意味不明な現象に見舞われる。

この原因は、Releaseのデバッグ用exeファイルの参照パスがDebugと同じになっているためだ。

Debug環境ではビルド時の出力先は以下のように設定されている。

$(ProjectDir)../../../simulator/win32/$(TargetName)$(TargetExt)

次にコマンド(ローカルデバッグ時の実行するexeファイル)の設定は以下。

$(OutDir)../../../../simulator/win32/$(TargetFileName)

つまりDebugビルドで出力されるexeファイルをローカルデバッグ時に参照する設定になっている。

次に、Release環境では、出力先のディレクトリは

$(OutDir)$(TargetName)$(TargetExt)

コマンド(ローカルデバッグ時の実行するexeファイル)の設定は

$(OutDir)../../../../simulator/win32/$(TargetFileName)

...おかしい。明らかにおかしい。

Release環境の出力exeと関係ないところを見ている。というかDebugの出力先を見ている。

この設定のせいで、Releaseでローカルデバッグを実行すると、EXEファイルが見つからないか、あるいはdebugでビルドされたexeを読み込んでわけのわからない挙動を起こす。

つまりは、Releaseビルドで生成されるexeファイルをデバッグのコマンドで指定してやるとよい。

cocos2.png

最低でも自分の環境では問題なく起動した。

ちなみにC++ Projectではこのあたりの設定はしっかりしている。Luaはメンテされていなかったのだろうか。

この現象に4~5時間ハマった。