質問: 大変困っています のchapter07を真似してSOILと呼ばれるopenglのソフトを利用しようと、追加の依存ファイル・追加のライブラリディレクトリに必要な入力を行ったにもかかわらず ``` 重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態 エラー LNK2019 未解決の外部シンボル __imp__strstr が関数 _query_DXT_capability で参照されました。 C++Game C:\Users\``\source\repos\C++Game\SOIL.lib(SOIL.obj) 1 重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態 エラー LNK2019 未解決の外部シンボル __imp__fread が関数 _SOIL_direct_load_DDS で参照されました。 C++Game C:\Users\’’’\source\repos\C++Game\SOIL.lib(SOIL.obj) 1 重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態 エラー LNK2019 未解決の外部シンボル __imp__feof が関数 _at_eof で参照されました。 C++Game C:\Users\'''\source\repos\C++Game\SOIL.lib(stb_image_aug.obj) 1 ``` が発生しました。どうすればいいかわからず困っております。よろしくお願いします 追記:説明不足ですみません。vs2017です
回答: `code/External/SOIL/lib/win/x86/SOIL.lib`が古いことが原因です。 Visual Studio 2015にて`strstr`などが含まれるCRT; C Runtime LibraryがC++言語でリファクタリングされました。これによりいくつかの関数がコンパイル時にインライン展開されるようになっています。これには副作用があり * Visual Studio 2013以前にコンパイルされたライブラリ (リンク時に結合されることを期待している)を * Visual Studio 2015以降でリンク (コンパイル時にインライン展開されることを期待している)を行う と質問のようなリンクエラーが発生します。 Game Programming in C++ CodeはVisual Studio 2017を使用することを想定しているようですので、`SOIL.lib`も同様にソースコードを取得しVisual Studio 2017を使用してビルドさし直すことが根本的な解決方法です。プロジェクトに報告するといいかもです。 暫定的な解決策としてリンカー入力に`legacy_stdio_definitions.lib`を追加することでリンクすることができると思います。