- ベストアンサー
STL使用時のデバッグ設定
現在C++を使いプログラミングをしています Microsoft Visual Studio 2005を使っているのですが SLTを使用した場合ランタイムライブラリの設定を マルチスレッドデバッグ→マルチスレッドに変更すると エラーが出ることがわかりました。 原因を調べているとSTLを使っているとエラーが出ることまで分かりました。 エラーが出るコードは #include <stdio.h> #include <LIST> using std::list; int main() { list<int> ilist; ilist.push_back(1); return 0; } warning LNK4098: defaultlib 'LIBCMT' は 他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。 の警告と共に、 未解決の外部シンボル~が参照されました。 とエラーがでます できればMTでコンパイルが通るようにしたいのですが、良い方法ないでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Debug構成の設定を無理やり デバッグなしの /MTでコンパイルOrリンク使用としているのが要因だと思います ビルド > 構成マネージャ > アクティブソリューションの構成を 『Debug』から『Release』に変更 Debug時に変更したオプション部分を プロジェクト > プロパティから変更して ビルドしましょう Debugモードでコンパイルされたソースにはランタイム側にもいろいろとデバッグに必要な関数があります しかしReleaseモードのランタイムにはデバッグ関連の関数は盛り込まれていません Release/Debugの設定をよく確かめましょう
その他の回答 (2)
闇雲にプロジェクトオプションをいじっても解決しないことが多いので、時間がかかっても、コンパイラ/リンカのエラーをちゃんと理解して解決していくようにした方がいいですよ。 warning LNK4098: defaultlib 'LIBCMT' ... が出る場合、自分/他人が作ったスタティックリンクライブラリをリンクしていることが多いです。例えばそのライブラリをコンパイルしたときのランタイムライブラリオプションがデバッグRTLなのに、メインのアプリケーションの方はリリースRTLでコンパイルしようとしている、などです。 ちなみに、 #include <stdio.h> #include <LIST> ではなく、 #include <cstdio> #include <list> に変更したら、何か変化ありますか?
補足
オプション部分はまだ無知な部分があったりで苦労しています。 変更してみましたが特に変化はありませんでした エラーの内容も追記しておきます エラー 5 fatal error LNK1120: 外部参照 3 が未解決です。 エラー 3 error LNK2019: 未解決の外部シンボル __malloc_dbg が関数 "void * __cdecl operator new(unsigned int,struct std::_DebugHeapTag_t const &,char *,int)" (??2@YAPAXIABU_DebugHeapTag_t@std@@PADH@Z) で参照されました。 libcpmtd.lib エラー 4 error LNK2019: 未解決の外部シンボル __free_dbg が関数 "void __cdecl operator delete(void *,struct std::_DebugHeapTag_t const &,char *,int)" (??3@YAXPAXABU_DebugHeapTag_t@std@@PADH@Z) で参照されました。 libcpmtd.lib エラー 2 error LNK2019: 未解決の外部シンボル __CrtDbgReportW が関数 "void __cdecl std::_Debug_message(wchar_t const *,wchar_t const *,unsigned int)" (?_Debug_message@std@@YAXPB_W0I@Z) で参照されました。 libcpmtd.lib
何か非標準のライブラリをリンクしていませんか? もし心当たりがあれば(そして該当ライブラリのソースをお持ちならば)、それもMTでコンパイルし、MT版をリンクすればリンクが通るようになるかと思います。
補足
Visual Studio の設定をすべてリセットして試してみましたが 同じエラーが出ました。 他に原因があるのでしょうか?
お礼
解決しました! デバッグとリリース時の違いに問題があったんですね。 今後は設定などもより気にかけようと思います。 問題が解決し非常に嬉しいです。ありがとうございました。