私はこの質問をしてから、自分で答えます。私は、それが初心者の質問であることを認識していますが、それは私に約かかりました。正解を見つけるのに2日かかりますが、とにかく投稿します。
免責事項は以上です。これは、すべての初心者に捧げられています。
私は VS 2010 で MFC プロジェクトに参加しましたが、サードパーティの静的ライブラリを追加する必要がありました。すべてがうまくいき、両方のプロジェクトがコンパイルされ、私のプロジェクトがライブラリを参照することができました。次に、ライブラリのヘッダー ファイルをプロジェクトにインクルードすると、C ランタイム ライブラリの関数に関する多くのリンカー警告が表示されました。
警告 9 警告 LNK4006: _sprintf は既に libcmtd.lib(sprintf.obj) で定義されています。2 番目の定義は無視されます C:path\to\my\project\MSVCRTD.lib(MSVCR100D.dll)
「なんてこった」と考えて、プロジェクトを実行しようとしましたが、「fostream」を使用してファイルに書き込もうとするコード行に遭遇するまで実行され、恐ろしいヒープ破損例外でクラッシュしました。
SOを検索すると、関連する問題がいくつか見つかりましたが、どれも私の問題と正確には一致しません:
- LNK4006 を取得せずに、Visual C++ の依存関係を持つライブラリをリンクする
- リリース ビルド ライブラリ (MSVCRT.lib) に対してデバッグ .exe (MSVCRTD.lib) をビルドするにはどうすればよいですか?
答えに出くわす前に、外部ライブラリをdllでほぼラップしました。