我正在使用 Qt creator 3.5.1 尝试从 National Instruments 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/.
因此,当我使用向导通过右键单击项目名称并选择“添加库...”来添加库时,QtCreator 本身添加了最后 3 个命令。我还尝试使用 '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;
}
所以你可以看到我包含了带有绝对引用的头文件,因为它没有以任何其他方式工作。
这似乎是一件很愚蠢的事情。我最近几天一直在这。
我希望它尽快解决。
谢谢