tanaka's Programming Memo

プログラミングについてのメモ。

Unity2017にしたらWebGLへのビルドでエラー

Unity2017.1にバージョンアップ後、WebGLへのビルドが IL2CPP のビルド時にエラーが発生するようになりました。OSはWindows7です。ログを見ると、以下のようなエラーが表示されていました。

stdout:
Building build.bc with EmscriptenToolChain.
    Output directory: C:\Users\Public\Documents\Unity Projects\webgl2017test\Temp\StagingArea\Data\Native
    Cache directory: C:\Users\Public\Documents\Unity Projects\webgl2017test\Library\il2cpp_cache
il2cpp.exe didn't catch exception: Unity.IL2CPP.Building.BuilderFailedException: INFO:root:Checking JS engine ['O:/Program Files/Unity 2017.2.0b4/Editor/Data\\Tools\\nodejs\\node.exe', '--stack_size=8192', '--max-old-space-size=2048'] failed. Check your config file. Details: Expected the command ['O:/Program Files/Unity 2017.2.0b4/Editor/Data\\Tools\\nodejs\\node.exe', '--stack_size=8192', '--max-old-space-size=2048', 'O:\\Program Files\\Unity 2017.2.0b4\\Editor\\Data\\PlaybackEngines\\WebGLSupport\\BuildTools\\Emscripten\\src\\hello_world.js'] to finish with return code 0, but it returned with code -1073741819 instead! Output: 
WARNING:root:did not see a source tree above or next to the LLVM root directory (guessing based on directory of O:\Program Files\Unity 2017.2.0b4\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten_FastComp_Win\llc), could not verify version numbers match
INFO:root:(Emscripten: Running sanity checks)
CRITICAL:root:The JavaScript shell used for compiling (['O:/Program Files/Unity 2017.2.0b4/Editor/Data\\Tools\\nodejs\\node.exe', '--stack_size=8192', '--max-old-space-size=2048']) does not seem to work, check the paths in O:\Program Files\Unity 2017.2.0b4\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\emscripten.config

原因

一時的に作成されるbuild.bcというファイルが生成されないというエラーですが、実際の原因はnode実行時の--stack_size=8192オプションがエラーを起こすことでした。試しにコマンドラインで実行してもエラーが発生することを確認しました。

そこで、ビルドが成功していたUnity5.6.2にバンドルされているnode 0.12.7で同じくnode --stack_size=8192を呼び出すと、こちらは実行できました。

それほど、エラー報告を目にしていないので、常に発生する問題ではないようですが、Windows7か、環境変数など、何らかの影響でエラーになるようです。

解決策

node.exeは、インストールフォルダー(C:\Program Files\Unity201701など)内の、Editor\Data\Tools\nodejsフォルダー内に入っています。念のため、そのフォルダー内のnode.exenode.bk.exeなどに名前を変更するなどして、とっておくとよいでしょう。

Unity5.6.2がインストールされていたら、Unity5.6.2のインストールフォルダー(C:\Program Files\Unity562など)から、Editor\Data\Tools\nodejsフォルダー内のnode.exeを、Unity2017.1の同様のフォルダー内のnode.exeと置き換えれば直りました。

f:id:am1tanaka:20170807214700p:plain

Unity5.6.2をすでにアンインストールしていましたら、こちらから、該当するOS用のインストーラーをダウンロードしてインストールして、インストール先のフォルダーからnode.exeを上書きしてください。

注意点

スタックの容量が何らかの原因で確保できないのが原因なので、nodeのその辺の設定方法があれば、スタックサイズを増やせば直るかも知れません。ちょっとそこまで調べきれていないので、よい方法があればご教示いただければ幸いです。