現在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でコンパイルが通るようにしたいのですが、良い方法ないでしょうか?
No.2
- 回答日時:
闇雲にプロジェクトオプションをいじっても解決しないことが多いので、時間がかかっても、コンパイラ/リンカのエラーをちゃんと理解して解決していくようにした方がいいですよ。
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
No.3ベストアンサー
- 回答日時:
Debug構成の設定を無理やり デバッグなしの /MTでコンパイルOrリンク使用としているのが要因だと思います
ビルド > 構成マネージャ > アクティブソリューションの構成を
『Debug』から『Release』に変更
Debug時に変更したオプション部分を プロジェクト > プロパティから変更して ビルドしましょう
Debugモードでコンパイルされたソースにはランタイム側にもいろいろとデバッグに必要な関数があります
しかしReleaseモードのランタイムにはデバッグ関連の関数は盛り込まれていません
Release/Debugの設定をよく確かめましょう
解決しました!
デバッグとリリース時の違いに問題があったんですね。
今後は設定などもより気にかけようと思います。
問題が解決し非常に嬉しいです。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- オープンソース Python openpyxlを使用したセル番地の使用について 1 2023/08/03 22:05
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- Perl Perl の外部モジュールの利用方法 3 2022/07/10 18:34
- Android(アンドロイド) MacroDroidでUSB設定の変更がしたいです。 AQUOS SENSE4 Basic を使用し 1 2022/07/30 11:20
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
- C言語・C++・C# C言語 3 2022/10/04 15:07
- その他(インターネット接続・インフラ) PCに関してのトラブル 2 2023/04/02 18:52
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
戻り値について
-
VBAを何回も作り直して、容量が...
-
ILSpyで、デコンパイルできない。
-
「fatal error C1189」を回避す...
-
windowsでLinuxで作成したソー...
-
” OS ビルド ” の意味が分か...
-
複数のサブディレクトリを一緒...
-
<math.h>があるのにsqrtが・...
-
コンパイルエラー:ユーザ定義...
-
漢字のコメントをはずすとコン...
-
エクセルVBAではRound...
-
C言語でmからnまでの合計を求め...
-
C++コンパイル時に『 C1083: in...
-
必要なDBG ファイルが見つから...
-
マクロ コンパイルがグレーバック
-
gdbデバッグのためのmakefile作成
-
不要な #include
-
RPGでプログラムからソースファ...
-
共有ライブラリの関数はヘッダ...
-
Makefile作成時の拡張子.oとは?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAを何回も作り直して、容量が...
-
<math.h>があるのにsqrtが・...
-
” OS ビルド ” の意味が分か...
-
Makefile作成時の拡張子.oとは?
-
「fatal error C1189」を回避す...
-
1 つ以上の複数回定義されてい...
-
ILSpyで、デコンパイルできない。
-
C言語でヘッダファイルにグロー...
-
エクセルVBAではRound...
-
セミコロンについて
-
マクロ コンパイルがグレーバック
-
C++コンパイル時に『 C1083: in...
-
外部シンボル "_main"は未解決です
-
PRO*C コンパイルエラー
-
コンパイルエラー:ユーザ定義...
-
クリティカルエラー Expressio...
-
ビルドとリビルドの違いを教え...
-
RPGでプログラムからソースファ...
-
戻り値について
-
C++のhppファイルをCでinclude
おすすめ情報