簡體   English   中英

Qt 5.5.1 MSVC 2013,32位-LNK1181:無法打開輸入文件'NIDAQmx.lib'

[英]Qt 5.5.1 MSVC 2013, 32 bit - LNK1181: cannot open input file 'NIDAQmx.lib'

我正在使用Qt Creator 3.5.1嘗試從National DAQmx示例中編譯c代碼。

為此,我需要包含頭文件“ NIDAQmx.h”並鏈接庫文件“ NIDAQmx.lib”。 這兩個文件都存在於項目文件夾中。

當我嘗試使用msvc 2013進行編譯時,出現錯誤:

LNK1181:無法打開輸入文件“ NIDAQmx.lib”

搜索互聯網時,我發現這是一個常見問題,錯誤代碼“ LNK1181”表示編譯器找不到該庫。 但是所有提出的案例都是非常具體的,我無法找到為什么這種方法不起作用的線索。

這是我的.pro文件:

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自己添加的。 我也嘗試添加路徑為'INCLUDEPATH + =“ $ absolute path”'和'LIB + =“ $ absolute path \\ NIDAQmx.lib”',但是都無濟於事。

下面是main.c ++文件中的示例代碼。 我從原始的c示例中獲取了代碼,並將其粘貼到了“ main.c ++”上。 我不認為這是問題的根源,因為這是關於庫包含的錯誤。

#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;
}

因此,您可以看到我包含帶有絕對引用的頭文件,因為它沒有任何其他作用。

看起來有些愚蠢。 我最近幾天都在這里。

希望早日解決。

謝謝

所以我終於突破了。 接下來的編譯沒有錯誤。

我所做的是為“ Desktop Qt 5.5.1 MSVC2013 32bit”工具包創建了一個新的控制台應用程序。 然后,我將頭文件和lib文件放在項目文件夾中。 我修改了在“新項目”上創建的main.cpp,以包括頭文件,並且還在.pro中包括lib文件和頭。 在main.cpp中,我僅復制了我嘗試編譯的NI示例中相關的代碼行。

您可以將上面的問題與下面的工作代碼進行比較,以檢查兩個項目之間的區別。 主要例程是相同的,但是主要功能是c ++並執行了QCoreApplication。

因此,這是.pro文件:

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:

#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應用程序。 這是有道理的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM