

大変困っています  
<https://github.com/gameprogcpp/code>

のchapter07を真似してSOILと呼ばれるopenglのソフトを利用しようと、追加の依存ファイル・追加のライブラリディレクトリに必要な入力を行ったにもかかわらず

[code]

    重大度レベル  コード 説明  プロジェクト  ファイル    行   抑制状態
    エラー 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   
    
[/code]

が発生しました。どうすればいいかわからず困っております。よろしくお願いします

追記:説明不足ですみません。vs2017です


CC BY-SA 4.0
2018-10-22T15:10:04.530
49541
2018-10-23T00:04:38.923
2018-10-22T23:55:26.443
30635
30635
question
c++ visual-studio opengl game-development
SOIL.lib関連で未解決の外部シンボルが発生する


`code/External/SOIL/lib/win/x86/SOIL.lib`が古いことが原因です。

Visual Studio 2015にて`strstr`などが含まれるCRT; C Runtime
Libraryが[C++言語でリファクタリングされました](https://msdn.microsoft.com/ja-
jp/library/hh409293.aspx#BK_CRT)。これによりいくつかの関数がコンパイル時にインライン展開されるようになっています。これには副作用があり

  * Visual Studio 2013以前にコンパイルされたライブラリ  
（リンク時に結合されることを期待している）を

  * Visual Studio 2015以降でリンク  
（コンパイル時にインライン展開されることを期待している）を行う

と質問のようなリンクエラーが発生します。

Game Programming in C++ CodeはVisual Studio
2017を使用することを想定しているようですので、`SOIL.lib`も同様にソースコードを取得しVisual Studio
2017を使用してビルドさし直すことが根本的な解決方法です。プロジェクトに報告するといいかもです。

暫定的な解決策として[リンカー入力に`legacy_stdio_definitions.lib`を追加](https://msdn.microsoft.com/ja-
jp/library/bb531344.aspx#stdio-h-conio-h)することでリンクすることができると思います。


CC BY-SA 4.0
2018-10-22T23:06:03.880
49547
2018-10-23T00:04:38.923
2018-10-23T00:04:38.923
4236
4236
49541
answer