C++ 【解説】LNK2019 未解決の外部シンボル _sscanf が関数 xxx で参照されました

Visual Studio 2010で作成したプロジェクトをVisual Studio 2015でビルドし直してみると

 

LNK2019 未解決の外部シンボル _sscanf が関数 xxx で参照されました。

 

というエラーが出る事があります。

このエラーの意味と対処方法について解説してみます。

なぜエラー LNK2019 が出るのか?

原因については以下のサイトで説明されています。 

Visual C++ 2015 での互換性に影響する変更点

 

この中の「現在、関数の printf ファミリと scanf ファミリは、インラインで定義されています。」という部分です。

 

利用しているライブラリ(Libファイル)がVisual Studio 2015以前でコンパイルされていて、そのライブラリが _sscanf や _sprintf などの関数を使用している場合、これまで参照できていた関数がインライン化された事で実体がなくなってしまった為におこるエラーです。

対処方法

Microsoftはすべての静的ライブラリを再コンパイルすることを推奨しています。

 

と言われても外部から提供されたライブラリなどを使っているとそれは簡単な事ではないのでlegacy_stdio_definitions.libをリンクするという方法でも対処する事が出来ます。

 

  

メニューから[プロジェクト(P)]→[プロパティ(P)]を開き、リンカ→入力の画面へ。

追加の依存ファイルlegacy_stdio_definitions.libを追加します。

(既に他のファイルが指定されている場合は「;」で区切って追加する)