2011-04-29 4 views
3

すべてを動的にリンクするときにコンパイルしてうまく動作するアプリケーションがありますが、静的なビルドが必要な場合はコンパイルされません。Windowsアプリケーションを静的に構築するときのエラー

Visual Studio 2010では、静的ライブラリオプションでUse MFCを設定しました。

私はこのエラーを取得することを実行します。

エラー1つのエラーLNK2001:16 LIBCMT.LIB(wwincrt0.obj)@ _wWinMain未解決の外部シンボル

私は、追加としてLIBCMT.LIBを追加しようとしていますしかし、それは何も変わらない。

どのようにこの問題を解決するためのアイデアですか?

答えて

2

あなたのプロジェクトの一部がアプリケーションとして構築され、ライブラリとして構築されていないことを意味する、WinMainというメッセージがありません。

完全に再構築し、すべての関連オプションが静的ライブラリを構築するように設定されていることを確認してください。 libcmt.libは、ライブラリではなく、最終的なアプリケーションにのみリンクする必要があります。

+0

私はJasonがexeをビルドしていると思いますが、DLLのバージョンではなく、ランタイムとMFCの静的バージョンを含んでいます。 –

1

プログラムをビルドするときに、Unicode/MBCS、マルチ/シングルスレッドなどのさまざまな設定を行うコンパイラフラグがあります。あるフラグセットと別のフラグを持つソースをコンパイルすると、そのようなリンカエラーが発生することがよくあります。

すべてのソースが、独自のライブラリを含め、同じフラグを使用していることを確認してください。

リンカーがライブラリLIBCMT.libのバイナリwwincrt0.objを含んでいるという具体的なエラーがあります。 wwincrt0.objは関数wWinMain()を参照しており、リンカーはそれを見つける場所を知らない。

LIBCMTは、LIBCのマルチスレッドバージョンです。あなたはそのうちの1つにリンクしますが、両方にはリンクしません。

wwincrt0は、コードを起動するCRT(Cランタイム)スタートアップコードのワイド(UNICODE)バージョンです。

WinMain()はWindowsの主な機能で、wWinMain()はWinMain()のワイド(UNICODE)バージョンです。

私はあなたのコードのいくつかはコンパイラフラグ/ MTでコンパイルされ、いくつかは別のフラグ(/ MTd、/ MD、/ MDd、/ LDまたは/ LDd)でコンパイルされていると推測します。

私の2番目の原因は、/ DUNICODEでコンパイルされたものと、/ DMBCSでコンパイルされたものです。

関連する問題