2

hereで詳しく説明されているように、まだ主要なコンパイルに苦しんでいますが、/NODEFAULTLIB の使用について具体的な副次的な質問があります。

ソリューション内のプロジェクトの 1 つが /MDd MSVCR90D.DLL の代わりに /MTd (LIBCMTD.LIB) を使用しているリンカーの問題を解決するために、この /NODEFAULTLIB:LIBCMTD スイッチを使用しようとしました。

残念ながら、この投稿のタイトルから推測できるように、私はこれを正しく使用していないようです。ソリューションをビルドすると、次の警告が 3 つの場所に表示されます。

1>cl : Command line warning D9002 : ignoring unknown option '/NODEFAULTLIB:LIBCMTD'

Windows XP Professional SP3 で Visual Studio 2008 Standard SP1 を実行しています。問題のあるプロジェクトを右クリックしてプロパティを選択し、[構成プロパティ] を展開し、C/C++ リストを展開して [コマンド ライン] を選択し、[追加オプション] に /NODEFAULTLIB:LIBCMTD と入力して、このスイッチを追加します。分野。

これは C/C++ 設定ではなくリンカー設定である必要があることを Web の他の場所で読んでいたので、[構成プロパティ] -> [ビルド イベント] -> [事前リンク イベント] -> [コマンド ライン] の下にも入力しようとしましたが、これにより、コンパイルとは異なる結果が得られることなく、独自の警告が表示されました。

1>The filename, directory name, or volume label syntax is incorrect. 1>Project : error PRJ0019: A tool returned an error code from "Performing Pre-Link Event..."

皆さん... /NODEFAULTLIB スイッチについてはどうですか? VS2008 にコマンドを認識させ、無視しないようにするにはどうすればよいですか?

ありがとう - アレックス

4

2 に答える 2

5

プロジェクトのプロパティには、構成プロパティ -> リンカー -> 入力 -> があります。

 'Ignore All Default Libraries'
 'Ignore Specific Default Libraries' <-- this is I suppose of interest for you

libc;libcmtd;libcd をそこに入れてみることもできますが、試したことはありません。すべてのライブラリを同じ構成でコンパイルするのが適切な方法です

于 2012-07-16T21:45:29.277 に答える
2

このオプションはここに文書化されています。一見すると、C ++ページではなくリンカページで使用しているため、正しく使用しているように見えますが、ファイル名に含める必要があることが不足していると思われます.lib。 :

/NODEFAULTLIB:LIBCMTD.LIB

このオプションを削除して、発生するリンカ エラーを確認すると、必要な正確な構文がわかると思います。ただし、より良い解決策は、このプロジェクト内のすべての個々のライブラリと dll を調べて、どれが他のランタイム ライブラリを使用しているかを見つけることです。後で回避するよりも、問題の原因を修正することをお勧めします。

于 2012-07-16T22:18:50.710 に答える