文書番号: 126646 - 最終更新日: 2011年7月1日 - リビジョン: 2.0

シングル スレッドのランタイム ライブラリでは、Visual C を使用して MFC アプリケーションをコンパイルしようとすると、エラー メッセージ:"エラー lnk2001 エラー: 未解決の外部シンボル"

お知らせお使いのオペレーティング システムには適用しない情報が含まれている場合があります。
すべて展開する | すべて折りたたむ

現象

シングル スレッドを使用して MFC アプリケーションをコンパイルするときランタイム ・ ライブラリは、次の 2 つ未解決外部エラーが表示されます。メッセージ:
nafxcwd.lib(thrdcore.obj): エラー lnk2001 エラー。
未解決の外部シンボル"__beginthreadex"
nafxcwd.lib(thrdcore.obj): エラー lnk2001 エラー。
未解決の外部シンボル"__endthreadex"

原因

バージョン 3.0 以降は、すべての MFC クラスは"スレッドです。"正常にリンクするには、マルチ スレッド ランタイム ライブラリを必要とします。多くの人々 を使用してため、シングル スレッドのランタイム ライブラリを使用しよう、Win32s で実行するアプリケーションを有効にするのにはこれらのライブラリを必要とします。これはそうではないです。したがって MFC バージョン 3.0 以降は、1 つのスレッドに使用します。このアプリケーションでは、追加のスレッドを作成していない限り、アプリケーションは、Win32s で実行されます。

解決方法

このような未解決の外部エラーを回避するには、設定しないで、プロジェクトの設定、シングル スレッドの MFC バージョン 3.0 以降アプリケーションです。この設定を変更するには、次の操作を行って。
  • Microsoft Visual C++。NET 2003
    1. クリックして、 プロジェクト メニューです。
    2. クリックしてください。 <project_name></project_name> プロパティ.
    3. 展開 構成プロパティ、し C および C++.
    4. クリックしてください。 コードの生成.
    5. 右側のウィンドウで、選択以外に行う シングル スレッド または シングル スレッドのデバッグ で、 ランタイム ライブラリ リストです。
  • 上Microsoft Visual C + + 2。x には、3 つの定義済みの権限レベル (高、中、および低) があります、5.0、および 6.0
    1. 選択、 プロジェクト メニューです。
    2. 選択、 設定. オプションです。
    3. 選択、 C および C++ タブします。
    4. 選択 コードの生成 で、 カテゴリ リスト ボックスです。
    5. 最後に、異なる選択を行う シングル スレッド で、 実行時ライブラリを使用します。 リスト ボックスです。
  • Microsoft Visual C++ 4。x には、3 つの定義済みの権限レベル (高、中、および低) があります
    1. 選択、 ビルド メニューです。
    2. 選択、 設定. オプションです。
    3. 選択、 C および C++ タブします。
    4. 選択 コードの生成 で、 カテゴリ リスト ボックスです。
    5. 最後に、異なる選択を行う シングル スレッド で、 実行時ライブラリを使用します。 リスト ボックスです。
メモ Visual Studio 2005年およびそれ以降のバージョンでは、シングル スレッド CRT が利用できません。詳細については、次の MSDN Web サイトを参照してください。
C のランタイム ライブラリ
http://msdn.microsoft.com/en-us/library/abx4dbyh.aspx (http://msdn.microsoft.com/en-us/library/abx4dbyh.aspx)

マルチ スレッド ライブラリのパフォーマンス
http://msdn.microsoft.com/en-us/library/ms235505.aspx (http://msdn.microsoft.com/en-us/library/ms235505.aspx)

状況

この動作は仕様です。

詳細

Win32s では、MFC バージョン 3.0 とそれ以降のバージョンを作成しないでください。スレッドを追加します。ただし、MFC スレッド ローカル ストレージを使用して(TLS) Dll でプロセス単位のデータを提供するマルチ スレッドのライブラリでは、Win32s の下の複数のアプリケーションで使用されます。

で、 プロジェクト設定 リンクするランタイム ライブラリ オプションを選択した場合ダイアログ ボックス、"マルチ スレッドを使用する DLL を [共有 DLL を使用することができますMSVCRT というx には、3 つの定義済みの権限レベル (高、中、および低) があります0. DLL (場所 x には、3 つの定義済みの権限レベル (高、中、および低) があります Visual C のメジャー バージョンを表します)。はバージョンの msvcrt という区別します。x には、3 つの定義済みの権限レベル (高、中、および低) があります0. DLL を Windows NT とすることはできません Win32s交換です。マルチ「スレッドを使用する DLL」は AFXDLL を構築する場合必要です。

マルチ スレッドのライブラリにリンクする複数の定義された可能性があります。シンボルのエラーです。これは、通常、ユーザーが作成したアプリケーションを使用して場合に発生またはシングル スレッドで作成されたサード ・ パーティ製静的ライブラリです。

最善策をここでを使用するのには、スタティック ・ ライブラリを再構築することがMFC (同じライブラリ オプション /MT または /MD オプション、どの MFC ライブラリによっては使用します。

ここでは、使用できないことがあります。 /NOD:LIBC。LIB.ただし、スタティック ライブラリが _errno など、静的なグローバル C ランタイム データにアクセスする場合または stdin、未解決の外部エラーこれらのシンボルで表示されます。

1 つ間違いなく動作するソリューションは、シングル スレッド コードを分離するために、DLL、およびそれによってマルチ スレッド MFC コードからセマフォを保護します。

関連情報

ランタイム ライブラリのオプションの詳細については、コンパイラ オプションのオンライン ヘルプ トピックを参照してください。 /MT/MD オプション.

この資料は以下の製品について記述したものです。
  • Microsoft Visual C++ .NET 2003 Standard Edition
  • Microsoft Visual C++ .NET 2002 Standard Edition
  • Microsoft Visual C++ 5.0 Professional Edition
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 4.2 Enterprise Edition
  • Microsoft Visual C++ 4.0 Standard Edition
  • Microsoft Visual C++ 2.1
キーワード:?
kbsweptvs2008 kbtshoot kberrmsg kbcompiler kbprb kbmt KB126646 KbMtja
機械翻訳機械翻訳
重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。
英語版 KB:126646? (http://support.microsoft.com/kb/126646/en-us/ )
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"