[英]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.