Qt 5.5.1 MSVC 2013, 32-битный — LNK1181: не удается открыть входной файл ‘NIDAQmx.lib’

Я использую Qt creator 3.5.1, чтобы попытаться скомпилировать c-код из примера National Instruments DAQmx.

Для этого мне нужно включить заголовочный файл «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.cppwin32: LIBS += -L$$PWD/./ -lNIDAQmx

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

Итак, последние 3 команды были добавлены самим QtCreator, когда я добавил библиотеку с помощью мастера, щелкнув правой кнопкой мыши имя проекта и выбрав «Добавить библиотеку …».
Я также пытался добавить путь с помощью ‘INCLUDEPATH + = «$ absolute path» «и с помощью» LIB + = «$ absolute path \ NIDAQmx.lib» «, но безрезультатно.

А ниже приведен пример кода в файле main.c ++. Я взял код из примера c orignal и вставил его в main.c ++. Я не верю, что это является источником проблемы, так как это ошибка в библиотеке include.

#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

Решение

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

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]