プロが教えるわが家の防犯対策術!

現在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でコンパイルが通るようにしたいのですが、良い方法ないでしょうか?

A 回答 (3件)

何か非標準のライブラリをリンクしていませんか?



もし心当たりがあれば(そして該当ライブラリのソースをお持ちならば)、それもMTでコンパイルし、MT版をリンクすればリンクが通るようになるかと思います。

この回答への補足

Visual Studio の設定をすべてリセットして試してみましたが
同じエラーが出ました。
他に原因があるのでしょうか?

補足日時:2008/12/06 21:09
    • good
    • 0

闇雲にプロジェクトオプションをいじっても解決しないことが多いので、時間がかかっても、コンパイラ/リンカのエラーをちゃんと理解して解決していくようにした方がいいですよ。



warning LNK4098: defaultlib 'LIBCMT' ... が出る場合、自分/他人が作ったスタティックリンクライブラリをリンクしていることが多いです。例えばそのライブラリをコンパイルしたときのランタイムライブラリオプションがデバッグRTLなのに、メインのアプリケーションの方はリリースRTLでコンパイルしようとしている、などです。

ちなみに、
#include <stdio.h>
#include <LIST>
ではなく、
#include <cstdio>
#include <list>
に変更したら、何か変化ありますか?

この回答への補足

オプション部分はまだ無知な部分があったりで苦労しています。
変更してみましたが特に変化はありませんでした

エラーの内容も追記しておきます

エラー5fatal error LNK1120: 外部参照 3 が未解決です。

エラー3error 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

エラー4error LNK2019: 未解決の外部シンボル __free_dbg が関数 "void __cdecl operator delete(void *,struct std::_DebugHeapTag_t const &,char *,int)" (??3@YAXPAXABU_DebugHeapTag_t@std@@PADH@Z) で参照されました。libcpmtd.lib

エラー2error LNK2019: 未解決の外部シンボル __CrtDbgReportW が関数 "void __cdecl std::_Debug_message(wchar_t const *,wchar_t const *,unsigned int)" (?_Debug_message@std@@YAXPB_W0I@Z) で参照されました。libcpmtd.lib

補足日時:2008/12/07 01:48
    • good
    • 0

Debug構成の設定を無理やり デバッグなしの /MTでコンパイルOrリンク使用としているのが要因だと思います



ビルド > 構成マネージャ > アクティブソリューションの構成を
『Debug』から『Release』に変更

Debug時に変更したオプション部分を プロジェクト > プロパティから変更して ビルドしましょう

Debugモードでコンパイルされたソースにはランタイム側にもいろいろとデバッグに必要な関数があります
しかしReleaseモードのランタイムにはデバッグ関連の関数は盛り込まれていません
Release/Debugの設定をよく確かめましょう
    • good
    • 0
この回答へのお礼

解決しました!
デバッグとリリース時の違いに問題があったんですね。
今後は設定などもより気にかけようと思います。
問題が解決し非常に嬉しいです。ありがとうございました。

お礼日時:2008/12/08 17:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!