エラー LNK2019: LabWindows™/CVI™関数を使用したVisual Studio C++プロジェクトでエラーが発生する

更新しました May 28, 2021

使用製品

ソフトウェア

  • LabWindows/CVI Base
  • LabWindows/CVI Full

その他

Microsoft Visual Studio

問題

Visual Studio C++プロジェクトでLabWindows/CVI関数を使用しようとしていますが、コードをコンパイルしようとすると、次のようなリンクエラーが発生します。

error LNK2019: unresolved external symbol

解決策

Visual Studio C++プログラムでLabWindows/CVI関数をコンパイルするには、まずインポートライブラリを使用して関数をダイナミックリンクライブラリ(.dll)にビルドしてから、インポートライブラリ(.lib)をC++プロジェクトにリンクする必要があります。関数をDLLにビルドしてリンクエラーを解決するには、次の手順を行います。
  1. 関数を含む計測器ドライバがLabWindows/CVIにまだロードされていない場合、Instrument>>Loadに進み、読み取る必要があります。表示されるダイアログボックスで、目的の.fpファイルに移動して、Loadをクリックします。
  2. 関数ツリーエディタを開くには、File>>Open>>Function Tree (*.fp)に進みます。表示されるダイアログボックスで、使用する.fpファイルを選択して、Loadをクリックします。
  3. DLLプロジェクトを作成するには、Options>>Create DLL Projectを選択します。プロジェクトのパスと名前を指定し、Saveをクリックします。下記のようなDLLプロジェクトをロードするかどうかを尋ねるメッセージがポップアップ表示されます。Yesをクリックします。

 
  1. DLLをビルドする前に、いくつかのビルド設定を構成する必要があります。Build>>Target Typeに進み、ダイナミックリンクライブラリの横にチェックマークが付いていることを確認して、ビルドターゲットタイプを最初に設定します。Build>>Configurationに進み、リリースの横にチェックマークが付いていることを確認して、プロジェクトをReleaseに設定します。
  2. Build>>Target Settingsに移動し、次の設定を変更します。
    1. 下図に示すように、Run-time supportオプションをFull run-time engineに変更します。

 
  1. Type Libraryをクリックし、Add type library resource to DLLをオフにして、タイプライブラリの設定を変更します。このオプションをオフにしないと、構築しようとしたときにこれらの型の定義は見つかりませんでしたというタイプ定義エラーが発生する可能性があります。

 

 
次に、OKをクリックして両方のウィンドウを終了します。
 
  1. DLLをビルドします。LabWindows/CVI 2012以前では、Build>>Create Release Dynamic Link Libraryを選択します。LabWindows/CVI 2013では、Build>>Buildを選択します。これにより、使用しようとしているLabWindows/CVI関数を含むダイナミックリンクライブラリ(.dll)とインポートライブラリ(.lib)が作成されます。これで、インポートライブラリをVisual Studioプロジェクトにリンクすることができます。
  2. Visual Studio C++プロジェクトを開き、Project>>Propertiesに移動します。Propertiesウィンドウで、Configuration Properties>>C/C++>>Generalに移動します。Additional Include Directoriesフィールドをクリックします。表示された矢印をクリックし、<Edit...>を選択します。

 
  1. ダイアログボックスが表示されたら、New Lineボタンをクリックし、ヘッダファイルを含むディレクトリを追加してOKをクリックします。

 
  1. Configuration Properties>>Linker>>Inputに移動します。Additional Dependenciesフィールドをクリックし、表示される矢印をクリックして<Edit...>を選択します。

 
  1. 表示されたダイアログボックスで、インポートライブラリのパスをAdditional Dependenciesのリストに追加します。

 
  1. Visual Studioプロジェクトをコンパイルし、リンクエラーを解決する必要があります。引き続きリンクエラーが表示される場合は、プロジェクトが複数のLabWindows/CVI関数ライブラリに依存している可能性があります。この場合、他のライブラリでもこの手順を繰り返す必要があります。

追加情報

使用しようとしている関数がインポートライブラリを持つDLLにバンドルされている場合は、手順1~6をスキップできます。

それでもリンクエラーが発生した場合は、おそらく名前修飾に関する問題が原因です。C++言語では、いくつかの関数(オブジェクト指向プログラミングのメソッドなど)を上書きすることができます。いくつかの名前が衝突する問題を解決するために、C++コンパイラは一意の名前識別子を持つために名前修飾を追加します。

したがって、C++プログラムでCライブラリを呼び出すと、C++コンパイラは名前を変更する必要がないことを知る必要があります。その場合、C++コンパイラによって作成された名前は、Cコードの名前とは異なり、リンケージエラーを説明します。これを解決するには、.cファイルに関連するヘッダーファイル(.h)に次のコードを追加する必要があります。

 

#ifdef __cplusplus

extern "C" {

#endif

    /* The functions you want to keep the same in C and C++ */

#ifdef __cplusplus

}

#endif