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/.
したがって、最後の 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;
}
したがって、他の方法では機能しなかったため、絶対参照を含むヘッダー ファイルをインクルードしていることがわかります。
それはばかげているようです。私はここ数日これに取り組んでいます。
早く解決することを願っています。
ありがとうございました