2

私はテンプレートVS.NET2003プロジェクトを持っています。これは、同僚がソフトウェアを開発するときにコピーしてカスタマイズします。

しばらく前にテンプレートが変更され、IgnoreSpecificLibraryプロパティがリリースビルドとデバッグビルドの両方でlibcmt.libを持つように設定されたようです(つまり、リリースとデバッグの両方で、ビルドはリンカーのlibcmt.libを無視する必要があります)。

これに基づくいくつかのプロジェクトはその後ビルドされ、リリースビルドはlibcmtd.lib(プロジェクトの.mapファイルを調べることで明らか)をプルし、ランタイムの問題(つまり、ブレークポイントのようにダイアログウィンドウがフラッシュされる)を引き起こしたようです。設定されていた)。

libcmt.libを除外するようにIgnoreSpecificLibraryを設定すると、プロジェクトはlibcmtd.libに対して自動的にリンクされますか?

奇妙なことに、テンプレートを(正しく設定せずに)ビルドするとlibcmt.libにリンクしますが、カスタマイズされたプロジェクトの一部(すべてではありません)はlibcmtd.libにリンクします。

何か案は?

4

2 に答える 2

2

多くのプロジェクトは、動的バージョンmsvcrt.libと競合するため、libcmt.libを無視します。リンカでlibcmtを無視すると、プロジェクトはmsvcrt.libでコンパイルされます。

于 2010-12-03T12:55:20.613 に答える
2

これが起こったことです:

リンカをコンパイルした後、オブジェクトファイルを取得し、特にシンボルテーブルを作成します。このテーブルには、フルフィルされていないsymol-requestが含まれています。次に、リンカはライブラリのリストを調べて、満たされていないシンボルを解決しようとします。libcmt.libを無視したため、サードパーティのライブラリに未解決のシンボルが残っているか追加されており、デバッグオプションがコンパイルされているため、licmtd.lib(およびおそらく他のライブラリ)からのシンボルを解決するためのリンカーリクエストが含まれています。

libcmt.libを無視しなかった場合、これらのシンボルはlibcmt.libによって解決される可能性が高く、libcmtd.libから何かを取り込む必要はありませんでした(まだ満たされていない他のシンボルを解決するために調べられたとしても)

libcmtd.libもigmoreしてみてください。未解決の外観が表示された場合は、libcmt.dllを無視することはお勧めできません。

于 2011-01-01T01:38:14.340 に答える