研究プロジェクトでは、科学計算言語への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
を追加しました。この問題を予想して、ライブラリがこのマクロを既に定義していると思います。とにかく、それは問題を解決しませんでした。
どうすればいいですか?
次のライブラリをリンカーの入力ファイルに追加します。
legacy_stdio_definitions.lib
VS 2015は、多くのstdio.h
関数の内部関数を呼び出すインライン定義を使用するようになりました。オブジェクトファイル(またはライブラリメンバー)がこれらの関数の1つに依存している場合、legacy_stdio_definitions.lib
は、リンク可能な関数の外部リンク可能なバージョンを提供します。
他のオプションは、VS 2015でこれらの機能に依存するユニットを再コンパイルすることです(これはおそらく推奨オプションです)。
バージョン5の最大SDK(純粋なC API)に対して最大プラグインのサイクリングをコンパイルすると、このエラーが発生しました。レガシーライブラリの修正は私にはうまくいきませんでした(それが必要であり、誰かが私が興味を持たない理由がわからない場合は)、stdioがロードされる前に_NO_CRT_STDIO_INLINEを定義し、それがトリックをしました.