TokyoDemoFest向けの実行ファイル作ってんだけど、ハマったマジで。
2018/9/24 VisualStudio2017Communityで設定を構築したので情報追記。
2018/11/2 64bit環境でコンパイルが失敗する挙動について追記。
エラーの内容
- アセンブラコードでFloat取り扱うときの注意点
なんか一部命令がうまく認識しないみたい。
よって、最初から最適化させて対応するのが早い。構成プロパティ→C/C++→最適化→最適化項目「無効」以外を選択する。
これで認識するようになる。もしくは自分でfloat取扱用のアセンブラコード書くか。
- パスに日本語を使わない方がいい
海外ソフトにありがちなんだけど、
Crinklerでリンク処理行うとき、ファイルの置き場所に日本語パスを指定してると文字が化けるので、正確なパスを参照できなくてエラーコード吐くという。日本語を含まないパスにファイルを置くことで解決するケースあり。
どちらかというとアプリケーション側でマルチバイト対応していないがゆえに起こる問題。
(ただ英語圏のソフトに対応を求めるのもおかしな話なので、個人で対応できたほうが早い)
- サブシステムがクリアされてるケース
新規にプロジェクト作成した場合、サブシステムが設定されてないのでエラー吐くことがある。リンカ→システム→サブシステム→SUBSYSTEM:Windowsを定義して対応。
- Crinklerは最新のものを使おう
何でかというと、元々結構過去のシステムへの対応してたみたいだけど、見たところWindowsSDKへの対応がかなり時間かかってたっぽい気が。具体的には、古いCrinklerを使うと謎のエラーでCrinklerが異常終了するので、それを回避する形になると時間がかかる。2018/9/24現在、同年更新されたファイルがあるので、それ使うとエラーが発生しなくなる。
- glext.hからの呼び出しファイルが不足する
自分の環境では、#include <KHR/khrplatform.h>
って記述が正常に読み込まれなかったので改造して対応した。
(ヘッダファイルとして読み込めればとりあえず問題はないので、VCのヘッダファイル集めてるフォルダに投げ込めば認識はしてくれる様子)ちなみに上記ソースは、各プラットフォーム特有の定義らしく、更新頻度は高いんじゃないかと思ってる。
- 64bit環境でアセンブラは使いづらい
https://www.officedaytime.com/tips/asm64/
https://kagasu.hatenablog.com/entry/2018/01/03/20033764bit環境でインラインアセンブラの記述が使えないため、
別途アセンブラ言語ファイルを記述、masmでアセンブルする必要あり。
もしくはCompiler Intrinsicsの導入を検討。