2015-11-25 3 views
0

Я использую Qt creator 3.5.1, чтобы попытаться скомпилировать c-код из примера National Instruments DAQmx.Qt 5.5.1 MSVC 2013, 32 бит - LNK1181: не удается открыть входной файл 'NIDAQmx.lib'

Для этого мне нужно включить заголовочный файл «NIDAQmx.h» и связать файл библиотеки «NIDAQmx.lib». Оба этих файла присутствуют в папке проекта.

Когда я пытаюсь скомпилировать с MSVC 2013 я получаю ошибку:

LNK1181: cannot open input file '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, когда я добавил библиотеку с помощью мастера щелкнув правой кнопкой мыши имя проекта и выбрав пункт «Add Library .. . '. Я также попытался добавить путь как с «INCLUDEPATH + =» $ абсолютным путем », так и с« LIB + = »$ absolute path \ NIDAQmx.lib», но безрезультатно.

И ниже приведен пример кода в файле main.C++. Я взял код из примера orignal и вставил его на '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; 
} 

Таким образом, вы можете видеть, что я включаю заголовочный файл с абсолютной ссылкой, поскольку он не работал каким-либо другим способом.

Кажется, что-то глупое. Я был в этом в последние дни.

Я надеюсь, что он скоро будет решен.

Спасибо

+0

Я вижу, что вы упомянули 32-битный бит в заголовке, но не совсем ясно, что вы строите 32-битное приложение или нет.Вы строите 32-битное приложение? Если нет, я считаю, что проблема заключается не в том, что окна не могут найти библиотеку, но библиотека, которую она находит, является неправильным bitlevel. – drescherjm

+0

Да, я строю 32-битное приложение, и я выбрал 32-битную версию библиотеки, предоставленную National Instruments. Я пробовал другие версии, но безуспешно, поэтому я использовал то, что имело смысл задавать здесь. Я на 64-битной Win 10, используя комплект «Desktop Qt 5.5.1 MSVC2013 32bit», который автоматически обнаружил 32-битный компилятор msvc для компиляции 32-битного. Кроме того, я создаю в режиме выпуска, чтобы избежать других проблем с именем библиотеки и еще чего-то. –

ответ

0

Итак, я наконец прорвался. Что следует скомпилировать без ошибок.

Что я сделал, я создал новое консольное приложение для набора «Desktop Qt 5.5.1 MSVC2013 32bit». Затем я поместил файлы заголовка и lib в папку проекта. Я изменил main.cpp, который был создан в «New Project», чтобы включить заголовочный файл, а также включил файл lib и заголовок в .pro. В 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 работает, не выполнив последние две строки кода. Это имеет смысл.

 Смежные вопросы

  • Нет связанных вопросов^_^