在Visual Studio C ++项目中使用LabWindows™/ CVI™函数出现error:LNK2019

更新 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. 通过Options>>Create DLL Project创建DLL项目 。选择一个路径并命名,然后单击“ save”。一个对话框会弹出并询问你是否需要立即加载DLL项目,和下面的对话框类似。点击Yes
  1. 在编译DLL之前,你需要对编译进行一些配置。首先在Build >> Target Type设置编译目标类型,并确保Dynamic Link Library(动态链接库)旁边有一个复选标记。还可以通过Build >> Configuration将项目设置为release(发布)模式,并确保Release旁边有一个复选标记。
  2. 通过Build >> Target Settings更改以下设置:
a. 将Run-time support选项更改为Full run-time engine ,如下图所示

b. 单击“ Type Library”并取消选中“ Add type library resource to DLL”。如果没有取消选中该条目,则在编译过程中会收到一个类型定义错误,类似Definitions for these types could not be found.


然后单击“OK”关闭窗口。
  1. 在LabWindows/CVI2012或更早版本之前编译DLL,选择Build >> Create Release Dynamic Link Library 。在LabWindows / CVI 2013中,选择Build >> Build 。这将创建一个动态链接库( .dll )和一个包含您需要使用的LabWindows / CVI函数的导入库( .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。

相关信息

如果您尝试使用的函数已经捆绑到带有导入库的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