首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QT5.5.1 MSVC 2013年,32位- LNK1181:无法打开输入文件“NIDAQmx.lib”

QT5.5.1 MSVC 2013年,32位- LNK1181:无法打开输入文件“NIDAQmx.lib”
EN

Stack Overflow用户
提问于 2015-11-25 13:33:34
回答 1查看 1.4K关注 0票数 0

我正在使用Qt 3.5.1尝试编译国家仪器DAQmx示例中的c代码。

为此,我需要包含一个头文件"NIDAQmx.h“,并链接一个库文件"NIDAQmx.lib”。这两个文件都存在于项目文件夹中。

当我尝试用msvc 2013编译时,我会得到以下错误:

LNK1181:无法打开输入文件“NIDAQmx.lib”

搜索互联网,我发现这是一个常见的问题,错误代码'LNK1181‘意味着编译器找不到库。但所有的案例都是非常具体的,我找不到为什么这不起作用的线索。

这是我的.pro文件:

代码语言:javascript
复制
QT += core
QT -= gui

TARGET = Test4NI
CONFIG += console
CONFIG -= app_bundle

TEMPLATE = app

SOURCES += \
    main.cpp


win32: LIBS += -L$$PWD/./ -lNIDAQmx

INCLUDEPATH += $$PWD/.
DEPENDPATH += $$PWD/.

因此,当我用向导添加库时,最后3个命令是由QtCreator自己添加的,方法是右键单击项目名称并选择'Add .‘。我还尝试用'INCLUDEPATH +=‘$absolute path’和'LIB +=‘$absolute path\NIDAQmx.lib’添加路径,但都没有效果。

下面是main.c++文件中的示例代码。我从原始的c示例中提取了代码,并将其粘贴到'main.c++‘上。我不认为这是问题的根源,因为这是一个关于库包含的错误。

代码语言:javascript
复制
#include <stdio.h>
#include "C:\BK\This\WorkEn\Qt\Test4\Test4NI\NIDAQmx.h"

#define DAQmxErrChk(functionCall) if( DAQmxFailed(error=(functionCall)) ) goto Error; else

int main(void)
{
    int32       error=0;
    TaskHandle  taskHandle=0;
    int32       read;
    float64     data[1000];
    char        errBuff[2048]={'\0'};

    /*********************************************/
    // DAQmx Configure Code
    /*********************************************/
    DAQmxErrChk (DAQmxCreateTask("",&taskHandle));
    DAQmxErrChk (DAQmxCreateAIVoltageChan(taskHandle,"Dev1/ai0","",DAQmx_Val_Cfg_Default,-10.0,10.0,DAQmx_Val_Volts,NULL));
    DAQmxErrChk (DAQmxCfgSampClkTiming(taskHandle,"",10000.0,DAQmx_Val_Rising,DAQmx_Val_FiniteSamps,1000));

    /*********************************************/
    // DAQmx Start Code
    /*********************************************/
    DAQmxErrChk (DAQmxStartTask(taskHandle));

    /*********************************************/
    // DAQmx Read Code
    /*********************************************/
    DAQmxErrChk (DAQmxReadAnalogF64(taskHandle,1000,10.0,DAQmx_Val_GroupByChannel,data,1000,&read,NULL));

    printf("Acquired %d points\n",(int)read);

Error:
    if( DAQmxFailed(error) )
        DAQmxGetExtendedErrorInfo(errBuff,2048);
    if( taskHandle!=0 )  {
        /*********************************************/
        // DAQmx Stop Code
        /*********************************************/
        DAQmxStopTask(taskHandle);
        DAQmxClearTask(taskHandle);
    }
    if( DAQmxFailed(error) )
        printf("DAQmx Error: %s\n",errBuff);
    printf("End of program, press Enter key to quit\n");
    getchar();
    return 0;
}

因此,您可以看到,我包含了一个绝对引用的头文件,因为它没有以任何其他方式工作。

好像有点傻。最近几天我一直在做这个。

希望很快就能解决。

谢谢

EN

回答 1

Stack Overflow用户

发布于 2015-11-25 21:18:54

所以我终于突破了。随后编译的内容没有错误。

我所做的就是为‘DesktopQT5.5.1 MSVC2013 32位’工具包创建了一个新的控制台应用程序。然后,我将头文件和lib文件放在项目文件夹中。我修改了在"New“上创建的main.cpp,使其包含了头文件,并在.pro中包含了lib文件和头文件。在main.cpp中,我只复制了与我试图编译的NI示例相关的代码行。

您可以检查两个项目之间的差异,将上面的问题与下面的工作代码进行比较。主例程相同,但主要函数是c++,执行QCoreApplication。

下面是.pro文件:

代码语言:javascript
复制
QT += core
QT -= gui

TARGET = Test5NI
CONFIG += console
CONFIG -= app_bundle

TEMPLATE = app

HEADERS += "C:\BK\This\WorkEn\Qt\Test5\Test5NI\NIDAQmx.h"
LIBS += "C:\BK\This\WorkEn\Qt\Test5\Test5NI\NIDAQmx.lib"

SOURCES += main.cpp

下面是main.cpp:

代码语言:javascript
复制
#include <QCoreApplication>
#include <C:\BK\This\WorkEn\Qt\Test5\Test5NI\NIDAQmx.h>

#define DAQmxErrChk(functionCall) if( DAQmxFailed(error=(functionCall)) ) goto Error; else

int main(int argc, char *argv[]){
    int32       error=0;
    TaskHandle  taskHandle=0;
    int32       read;
    float64     data[1000];
    char        errBuff[2048]={'\0'};

    /*********************************************/
    // DAQmx Configure Code
    /*********************************************/
    DAQmxErrChk (DAQmxCreateTask("",&taskHandle));
    DAQmxErrChk (DAQmxCreateAIVoltageChan(taskHandle,"Dev1/ai0","",DAQmx_Val_Cfg_Default,-10.0,10.0,DAQmx_Val_Volts,NULL));
    DAQmxErrChk (DAQmxCfgSampClkTiming(taskHandle,"",10000.0,DAQmx_Val_Rising,DAQmx_Val_FiniteSamps,1000));

    /*********************************************/
    // DAQmx Start Code
    /*********************************************/
    DAQmxErrChk (DAQmxStartTask(taskHandle));

    /*********************************************/
    // DAQmx Read Code
    /*********************************************/
    DAQmxErrChk (DAQmxReadAnalogF64(taskHandle,1000,10.0,DAQmx_Val_GroupByChannel,data,1000,&read,NULL));

    printf("Acquired %d points\n",(int)read);

Error:
    if( DAQmxFailed(error) )
        DAQmxGetExtendedErrorInfo(errBuff,2048);
    if( taskHandle!=0 )  {
        /*********************************************/
        // DAQmx Stop Code
        /*********************************************/
        DAQmxStopTask(taskHandle);
        DAQmxClearTask(taskHandle);
    }
    if( DAQmxFailed(error) )
        printf("DAQmx Error: %s\n",errBuff);
    printf("End of program, press Enter key to quit\n");
    getchar();

    QCoreApplication a(argc, argv);
    return a.exec();
}

因此,我想我没有正确的Qt应用程序运行,因为我没有执行最后两行代码。这说得通。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33917847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档