Я использую 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;
}
Таким образом, вы можете видеть, что я включаю заголовочный файл с абсолютной ссылкой, поскольку он не работал каким-либо другим способом.
Кажется, что-то глупое. Я был в этом в последние дни.
Я надеюсь, что он скоро будет решен.
Спасибо
Я вижу, что вы упомянули 32-битный бит в заголовке, но не совсем ясно, что вы строите 32-битное приложение или нет.Вы строите 32-битное приложение? Если нет, я считаю, что проблема заключается не в том, что окна не могут найти библиотеку, но библиотека, которую она находит, является неправильным bitlevel. – drescherjm
Да, я строю 32-битное приложение, и я выбрал 32-битную версию библиотеки, предоставленную National Instruments. Я пробовал другие версии, но безуспешно, поэтому я использовал то, что имело смысл задавать здесь. Я на 64-битной Win 10, используя комплект «Desktop Qt 5.5.1 MSVC2013 32bit», который автоматически обнаружил 32-битный компилятор msvc для компиляции 32-битного. Кроме того, я создаю в режиме выпуска, чтобы избежать других проблем с именем библиотеки и еще чего-то. –