先日Visual StudioでDXライブラリを使えるようにプロジェクトを作りビルドしたらエラーが出てしまった。未解決の外部シンボル~がうんたら。エラー文を見る限りではライブラリがうまく通ってないっぽい。
とあるゲームプログラミング関連のサイトで解決策がすでに書かれているのだが何故かアクセスできないことが多いので補完の意味も込めてメモ。
LNK2019未解決の外部シンボルがうんたら
先日Visual Studio 2017から2019に乗り換えた。その際に既存のプロジェクトを一から作り直したのだがビルド時に以下のエラーが出てしまった。
LNK2019 未解決の外部シンボル _main が関数 “int __cdecl invoke_main(void)” (?invoke_main@@YAHXZ) で参照されました
未解決の外部参照、と書かれているのでおそらくはDXライブラリの設定を間違えたんだろうなと(本来なら変数のスペルミスとか疑うべきだが)。
DXライブラリ置き場に書かれている手順通り設定をし直したがそれでも同じエラーが出てしまった。DXライブラリ自体に不具合があるようでもない。どうもDXライブラリの設定ミスではないっぽい。
テンプレートの選択ミス
よくわからないのでとりあえず出てきたエラー文で検索したところ、だいぶ前から同じ症状に遭った人がいて、すでに解決済みの問題であった。
DXライブラリの設定ミスではなく、プロジェクトを作る際に選ぶテンプレートを間違えてしまったらしい。
ブログ主の場合、テンプレートから空のプロジェクトを選択したのだがそれがエラーの元だったようだ(正しくはWindowsデスクトップウィザード→空のプロジェクトを選ぶ)。
もし一旦プロジェクトを作成してしまった場合、また一から作り直さないといけないかというとそんなことはなく、プロパティの設定を変更すればこの問題を解決できる。
未解決の外部シンボルエラーを解消する
まずは上のメニューから「プロジェクト(P)」を選択し、出てきたリストから「プロパティ(E)」を選択する。
出てきたダイアログ画面で左のリストから構成プロパティ→リンカ→システムと選択し、そしてサブシステムをWindows(/SUBSYSTEM:WINDOWS)にする。
最後にOKまたは適応をクリック。これでビルド時に上のエラー文は出てこなくなり正常にコンパイルされる。
最初からDXライブラリ置き場の手順通りにやればよかったのだが、中途半端にやり方を覚えていたせいで面倒なエラーに出会ってしまった。今後は気をつけたい。
コメント
私も、空のプロジェクトを選択しており同様のエラーに悩まされていたので助かりました。既に作成されたプロジェクトについての解決方法も書かれており、おかげ様ですべてのDXのプロジェクトを正常に使えるようになりました。ありがとうございました!