テクニカル ドキュメント #35



Doc ID: 35
製品: WinDriver
Version:  --

MSDEV で、WinDriver のアプリケーションをビルドすると、以下のエラーが発生します:
" int_io.obj : error LNK2001: unresolved external symbol __beginthreadex ".

プロジェクトの設定に関連するフラグを追加して、プロジェクトからマルチスレッドを有効にしてください。

MDSEV (Visual C++) でコンパイルする際には、Microsoft のフラグは、-MT となります。よって、プロジェクトの設定に /MT を追加します。
[今オプションを 'プロジェクト' --> '設定...' を選択し、'C/C++' タブの 'カテゴリ: 一般'を選択し、'プロジェクト オプション' ボックスに追加します]

他のコンパイラの場合、コンパイラ独自のマルチ-スレディングのフラグを使用してください。たとえば、Borland C++ Builder のフラグは、-tWM です。

注意: -MT および -tWM のフラグは、MSDEV および Borland C++ Builder の WinDriver のサンプルおよび DriverWizard で生成されるプロジェクトの一部となっています。[MSDEV 4.0 の場合、WinDriver v6.02 以降からとなります]。

更に、WinDriver v6.00 以降、C/C++ アプリケーションから WinDriver のスレッド関数 (ThreadStart() および ThreadStop() - WinDriver/src/utils.c で実装) を使用するには、プロジェクトに _MT precompiler definition があることを確認してください。この定義もまた、WinDriver のサンプルおよび生成されたコードの一部に統合されています。
MSDEV 5-6 の場合、この定義は、WinDriver v6.00 以降のサンプル/生成されるコードの一部であり、MSDEV 4 の場合、v.602 以降となります。
orland C++ Builder (4-6) の場合、この定義は、WinDriver v6.03 以降のサンプル/生成されるコードの一部です。
WinDriver の以前のバージョンを使用する際には、プロジェクトを生成する場合、この定義をプロジェクトに自分で追加します:

MSDEV では、次の何れかを実行してください:
  • MSDEV IDE でプロジェクトを開いて、'プロジェクト' --> '設定' を選択し、'C/C++' タブで、'プリプロセッサの定義' ボックスに _MT を追加し、'カテゴリ' で 'プリプロセッサ' または '一般' を選択します。
  • # ADD CPP セクションで /D "_MT" を追加することによって、直接プロジェクト (*.dsp) ファイルまたは makefile (MSDEV 4.0) を編集します。

Borland C++ Builder では、次の何れかを実行してください:
  • Borland C++ Builder IDE 内から、_MT precompiler definition プリプロセッサ 定義を追加します:
    Project --> Options ・--> Directories/Conditionals --> Conditionals --> Conditional Defines
  • プロジェクト (*.bpr) ファイルを直接編集し、以下のように "USDERDEFINES" セクションを設定します:
    <USERDEFINES value="_MT"/>     [BCB v5.00 - 6.00 の場合]
    または:
    USERDEFINES = _MT                             [BCB v4.0 の場合]