使用由“.h”、“。lib”和“.dll”文件组成的第三方库

4

目前,我正在尝试使用National Instruments和IVI Foundation的VISA库来读写各种外部设备的命令。

我对我的IDE:Microsoft Visual C++ Express 2010相对陌生,这是我第一次尝试使用需要超过.h导入的第三方库。

基本上,我有一个包含3个头文件的目录,一个包含3个.lib库的目录和一个包含7个DLL的目录。它们没有任何关于单个文件的文档说明,只有整个库的说明。因此,我需要将所有这些文件与我的项目关联起来。

目前,我已经在我的头文件中导入了所有头文件,并将头文件目录添加到项目属性中的包含目录中。我还将包含.lib文件的目录添加到项目属性中的库目录中。我认为.lib文件会链接到DLL,但显然并非如此,因为我收到以下错误:

VISA Console 2.obj : error LNK2019: unresolved external symbol _viOpenDefaultRM@4 referenced in function _wmain

当使用库中的任何函数时,就会发生此错误。以下是我的当前代码:

#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
    ViStatus status;
    ViSession defaultRM, instr;

    status = viOpenDefaultRM(&defaultRM);

    return 0;
}

如果我注释掉viOpenDefaultRM命令,那么该项目将会构建成功,因此我认为这意味着我可以使用库中的对象而不是命令。由于我有三个对象声明,它们可以顺利地构建。

好的,这就是我的所有信息,希望有人能够帮助并希望这对其他人有所帮助!

2个回答

6

除了将.lib文件的目录添加到库目录属性中,您还需要添加链接器应该搜索的实际库。

将库添加到项目的

 Configuration Properties | Linker | Input | Additional Dependencies

领域。

DLL文件在构建过程中并不是必需的,但要运行程序,它们应该在PATH目录中或与程序文件相同的目录中。


请确保使用正确的路径:Visa提供了32位和64位版本的库;由于Visa安装程序创建了VXIPNPPATH和VXIPNPPATH64环境变量,最好使用它们而不是硬编码路径。 - stijn
@stijin 抱歉,是的,我已将文件添加到附加依赖项中。我添加了这三个.lib文件的完整路径,但它们在对话框中看起来不像其他的.lib文件。所有其他文件都删除了完整的文件路径,而我的仍然保留着,而且我的文件没有显示在外部依赖项文件夹中。 - jjno91
@stijn 好的,我把附加依赖项改成了$(VXIPNPPATH64),这样就把错误信息改成了:LINK : fatal error LNK1104: cannot open file 'C:\Program Files\IVI Foundation\VISA\.obj'。这是否意味着环境变量有问题? - jjno91
你不必使用VXIPNPPATH,而是像$(VXIPNPPATH)\winnt\lib这样的路径,我不太确定,但你可以通过在资源管理器中查找正确的子目录来轻松解决问题。 - stijn
@stijn 非常感谢。我已经解决了。显然你根本不需要库目录。我只需要将include目录设置为: C:\Program Files %28x86%29\IVI Foundation\VISA\WinNT\include并将链接器附加依赖项设置为: "$(VXIPNPPATH)WinNT\lib\msc\visa32.lib",这是32位的,我还没有让它在64位上工作,但这就是我所需的全部。再次感谢,希望这能节省其他人的时间! - jjno91

1

您是否已将附加依赖项添加到项目属性中?

在“链接器->输入”下找到“附加依赖项”,并将从中获取的库放置在那里。


抱歉,是的,我已将文件添加到附加依赖项中。我将这三个.lib文件的完整路径添加到其中,但它看起来与对话框中的其他.lib文件不同。所有其他文件都删除了完整文件路径,而我的仍然保留,而且我的文件没有显示在外部依赖项文件夹中。 - jjno91

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接