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

Visual Studio 2010などの古いVisual Studioで作成したプロジェクトをVisual Studio 2015以降の新しいVisual Studioでビルドし直してみると・・・

 

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を追加します。

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

コメントをお書きください

コメント: 2
  • #1

    かける (火曜日, 09 7月 2019 10:26)

    やってみましたが変わらず同じエラーが出たままです…。

  • #2

    うさ (水曜日, 06 11月 2019 17:56)

    Visual Studio Express 2017において、videoInput Libraryがこのエラーで使えなくなってしまい参っていたのですが、legacy_stdio_definitions.libをリンクすることで、再びビルドできるようになりました。助かりました。

    videoInput Library
    http://www.muonics.net/school/spring05/videoInput/