2010-11-26 19 views
0

私はこの問題を抱えていますが、これは警告ですが、ボンネットの下で何か問題があると思われます。私はリリースモードでビルドするとき、私はこの警告を得る:リンカの警告C++ Visual Studio

MSVCRT.LIB(cinitexe.obj):警告LNK4098:他のLIBSを用いたDEFAULTLIB「MSVCRTD.LIB葛藤。/NODEFAULTLIB:library

私はVisual Studio C++ Express Editionに動的DLLを構築しています。私がデバッグモードでそれをするとき、警告は発生しません。私はちょっとグーグルして、それはmsvcrtmsvcrtdの両方がマルチスレッド、デバッグ用とそれ以外の両方であると思われます。私はMSVCRT.lib/NODEFAULTLIBを使うことができましたが、私は症状を避けることが本当に問題に役立つとは思わない。

これが大きな問題であるかどうかは本当にわかりません。 DLLと.libファイルが正しく生成されます。

+1

リリースバージョンには、msvcrtd.libだけでなく、msvcrt.libのみが含まれている必要があります。誤って何かを追加していないと確信していますか? – casablanca

+0

あなたはここに新しい人がいることがわかります。以下の回答のいずれかが問題を解決するのに役立つ場合は、その回答に「受け入れ済み」とマークしてください。 :) –

答えて

0

Visual StudioのデバッグC++ランタイムを配布することが許可されていないため、予期しないクラッシュがアプリケーションに発生する可能性があり、msvcrtd.libをリンクするアプリケーションを配布できないため、これは大きな問題です。 /NODEFAULTLIBはそれらを修正する必要がありますが、問題自体を修正する必要があります。

casablancaと同様に、msvcrtd.libはリリースモードでリンクされていますが、デバッグモードでのみリンクする必要があります。 これは、自分のアプリケーションに間違ったリンカー設定があることを意味するものではありません。プロジェクトで使用しているライブラリのいずれかが正しく設定されていない可能性があります。

これを修正するには、大きなファイル(例:SciTE)を開くことができるテキストエディタを使用して、アプリケーションがリンクするすべてのリリース.libファイルを開き、次にそれらを検索します。 VC80.DebugCRT(この場合VC80 == Visual Studio 2005)、これらのライブラリの1つでこの文字列が見つかると、そのライブラリは/MDで再コンパイルする必要があります。

ダイナミックライブラリをリンクする場合は、ファイルを.libのファイルを手動で検索する代わりに.dllファイルで使用できます。 Dependency Walkerが、例えば以下のようなデバッグcrt DLLファイルの1つに依存関係を示す場合。 MSVCP80D.dll(末尾のDに注意してください)、/MDを使用してそのライブラリを再コンパイルしてください。

0

問題はあなたのライブラリに関連しています。 これらはプログラムとは異なる方法でリンクされています。

あなたのプログラムはシングルスレッドでもライブラリはマルチスレッドとしてリンクされていてもかまいません。設定値(例えば、 "マルチスレッドデバッグDLL(/ MDD)" を)参照するに

Project Properties 
Configuration Properties 
C/C++ 
Code Generation 
Runtime Library 

ルック。

0

プロジェクトのリリース設定でランタイムライブラリ設定が正しいことを確認してください。基本的にはDebugビルドと同じでなければなりませんが、説明の中に「Debug」という単語はありません。この問題に関するVisual Studioのドキュメントはhereです。

次のように設定を確認してください:ソリューションエクスプローラで

  • を右([プロパティ]ウィンドウの上部にある)設定がActive (Release)
  • 設定に行くであることを確認し、プロジェクトをクリックし、[プロパティ]
  • を選択プロパティ - > C/C++ - >コード生成
  • リリースのランタイムライブラリがCRTのDebugバージョンではないことを確認してください。
関連する問題