3

すべてを動的にリンクするとコンパイルして正常に動作するアプリケーションがありますが、静的にビルドしたい場合はコンパイルされません。

Visual Studio 2010 で、「スタティック ライブラリで MFC を使用する」オプションを設定しました。

これを行うと、次のエラーが表示されます。

Error   1   error LNK2001: unresolved external symbol _wWinMain@16  LIBCMT.lib(wwincrt0.obj)

追加のライブラリとして追加しようとしLIBCMT.libましたが、何も変わりません。

この問題を解決する方法についてのアイデアはありますか?

4

2 に答える 2

2

それが見つからないというメッセージから、WinMainプロジェクトの一部がライブラリとしてではなくアプリケーションとして構築されていることがわかります。

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

于 2011-04-29T20:44:41.637 に答える
1

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

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

あなたが持っている特定のエラーは、リンカーがライブラリLIBCMT.libからバイナリwwincrt0.objをインクルードしていることを示しています。wincrt0.obj は関数 wWinMain() を参照していますが、リンカはその場所を認識していません。

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

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

WinMain() は Windows のメイン関数で、wWinMain() は WinMain() のワイド (UNICODE) バージョンです。

コードの一部はコンパイラ フラグ /MT でコンパイルされ、一部は別のフラグ (/MTd、/MD、/MDd、/LD、または /LDd) でコンパイルされていると思います。

私の 2 番目の問題は、/DUNICODE でコンパイルされたものと /DMBCS でコンパイルされたものがあるということです。

于 2011-04-29T21:04:40.543 に答える