2017-09-18 23 views
1

自分のプロジェクトで使用する.libファイルにC++を作成しようとしています。Visual StudioのC++ .libのデバッグとデバッグを組み合わせる

私はファイルLog.hLog.cppを持っています。

Visual Studioでプロジェクトプロパティに入り、設定タイプを.exeから.libに変更しました。ビルド・モードをReleaseに設定し、クラスをLog.libというファイルに作成しました。

新しいC++プロジェクトでは、Log.hファイルと一緒に作成した.libファイルをインクルードしようとしています。すべてが成功した、それは私の機能を認識し、私は私のLog.h含まれて私のexeファイルのプログラムを実行しようとすると、私は次のエラーを取得:this StackOverflowのポストを参照することにより

mismatch detected for '_ITERATOR_DEBUG_LEVEL': 
    value '2' doesn't match value '0' in main.obj 

を、私はその建物を発見し、私の新しいを実行していますReleaseモード(.libモードと同じ)でプロジェクトを実行するとエラーがなくなり、プログラムを正常に実行してLog.hを使用できます。

Log.h libをDebugReleaseの両方にコンパイルするにはどうすればできますか?

+1

ライブラリのDebugバージョンとReleaseバージョンの両方をビルドする必要があります。そしてあなたのメインプロジェクトに適切なものをリンクしてください。両方のプロジェクトでソリューションを作成し、メインプロジェクトの参照にライブラリプロジェクトを追加すると、自動化されます。 –

答えて

0

libをビルドして、DebugおよびRelease Cランタイムライブラリ(CRT)と互換性があるようにすることはできません。 hereも参照してください。

しかし、あなたのexeプロジェクトでCRTのバージョンを変更することは可能です:デバッグとリリースの両方の設定が同じバージョンのCRTを使用している場合(例:Multi-threaded DLL (/MD))、リリース設定であなたのlibをビルドし、 exeプログラムのリリースとデバッグの設定(これによりデバッグのサポートが低下します)。

Visual Studioでランタイムライブラリを変更するには、プロジェクトプロパティを開き、 "C/C++" - "コード生成" - "ランタイムライブラリ"(これは使用するVisual Studioのバージョンによって異なりますが、少なくともVS2010-2015に有効です)。

+0

ありがとうございました!私は必要な簡単な答え。 – Acidic

3

プロジェクトがリンクしているCランタイムライブラリのバージョンに不一致があります。プロジェクトの1つはCRTのデバッグバージョンにリンクし、もう1つはCRTのリリースバージョンにリンクしています。その混合構成はサポートされていないため、エラーメッセージが表示されます。標準ライブラリテンプレートクラスは、実際にはデバッグビルドとリリースビルドで異なります。

すべてのプロジェクト(出力としてEXEファイルまたはLIBファイルのいずれかを生成するすべてのもの)の設定を確認し、すべてが同じバージョンのCRTを使用していることを確認する必要があります。これはコンパイラに渡されるthe /MT or /MD switchesです。

+0

私はSDL2を使用しており、プロジェクトにリンクするために必要な 'SDL2.lib'と' SDL2main.lib'を提供しました。しかし、これらのlibファイルは、 'Release'と' Debug'モードの間で切り替えても問題ありません。 – Acidic

+0

私はあなたのコメントを理解していません。これらのライブラリのどちらもC++標準ライブラリを使用していない場合、この問題は発生しません。デバッグバージョンとリリースバージョンを混在させることはできません。 –

関連する問題