web-dev-qa-db-ja.com

C ++:Visual Studio 2015で未解決の外部シンボル_sprintfおよび_sscanf

研究プロジェクトでは、科学計算言語へのC++アドオンを作成しています。残念ながら、ユーザーがこれを行うことを可能にするライブラリは、非常に最新の状態に保たれていません。

XCodeでプロジェクトを開始しました。後でPCに移動する必要があったため、コードをVisual Studio 2015に移行しました。これを行ってから、次のエラーのためにビルドできませんでした。

LNK2001 : unresolved external symbol _sprintf
LNK2019 : unresolved external symbol _sscanf referenced in function _GetDDouble
LNK2019 : unresolved external symbol _sprintf referenced in function _CheckRunningInMainThread

修正を試みたのは、ヘッダー#define _CRT_SECURE_NO_WARNINGSを追加することでした。ただし、これはa)エラーを修正せず、b)警告C4005 : '_CRT_SECURE_NO_WARNINGS': macro redefinitionを追加しました。この問題を予想して、ライブラリがこのマクロを既に定義していると思います。とにかく、それは問題を解決しませんでした。

どうすればいいですか?

48
NcAdams

次のライブラリをリンカーの入力ファイルに追加します。

legacy_stdio_definitions.lib

VS 2015は、多くのstdio.h関数の内部関数を呼び出すインライン定義を使用するようになりました。オブジェクトファイル(またはライブラリメンバー)がこれらの関数の1つに依存している場合、legacy_stdio_definitions.libは、リンク可能な関数の外部リンク可能なバージョンを提供します。

他のオプションは、VS 2015でこれらの機能に依存するユニットを再コンパイルすることです(これはおそらく推奨オプションです)。

145
Michael Burr

バージョン5の最大SDK(純粋なC API)に対して最大プラグインのサイクリングをコンパイルすると、このエラーが発生しました。レガシーライブラリの修正は私にはうまくいきませんでした(それが必要であり、誰かが私が興味を持たない理由がわからない場合は)、stdioがロードされる前に_NO_CRT_STDIO_INLINEを定義し、それがトリックをしました.

1
David Karla