2011-02-16 4 views
1

Qt (4.7.0)를 사용하여 Windows (7) 어플리케이션을 개발하여 DLL (NI visa32.dll)의 일부 메소드를 호출하여 GPIB 포트를 통해 계측기와 통신합니다. 제조업체의 헤더 파일도 사용할 수 있습니다 (visa.h).Qt C++ 4.7에서 NI-VISA에 액세스하기

collect2: ld returned 1 exit status 
:하지만, 내가 컴파일 오류가

INCLUDEPATH += "C:/Program Files/National Instruments/Shared/CVI/Include" 
LIBS  += "C:/Windows/System32/visa32.dll" 

: 프로젝트 파일에서

, 나는 파일로에있는 원래의 장소에 대한 경로와 라이브러리 참조를 추가하는 시도

Importing a DLL into Qt의 지침에 따라 "visa32.dll"에서 "visa.a"를 만들고 하위 폴더 "visa/lib"에 복사 한 다음 경로 및 라이브러리를 프로젝트 파일에 추가했습니다.

INCLUDEPATH += visa/include 
LIBS  += -Lvisa/lib 
LIBS  += -lvisa.a 

나는 -lvisa 또는 -lvisa.dll와도했지만, 모든 경우에 나는 또한 -lvisa, -lvisa.a 또는 -lvisa.dll가 발견되지 않는 것을 말하는 또 다른 컴파일 오류가 발생합니다. 원래 헤더 파일 "visa.h"를 편집하고 파일의 모든 오브젝트 앞에 Q_DECL_IMPORT 접두어를 붙였으며 extern "C"문이 있는지도 확인했습니다.

나는 같은 응용 프로그램에서 헤더 파일에 대한 참조 포함 :

#include "visa.h" 

및 컴파일러가 visa.h 파일에 속하는 참조 된 개체를 인식 않습니다.

이 컴파일 오류를 해결하는 데 도움이 될 것입니다 크게 감사하겠습니다.


또한 DLL References in Visual C++의 지침에 따라 Visual C++ (2010)를 사용해 보았습니다. 이 경우 컴파일 오류는 발생하지 않지만 오류는 발생하지 않습니다. 예 :

AgiE364X.obj: error LNK2019: unresolved external symbol 
"extern "C" long __stdcall viClose(unsigned long)" 

viClose NI-VISA에서 호출되는 메소드입니다.

Visual C++ 대신 Qt C++를 사용하고 싶습니다.

미리 감사드립니다.

답변

0

내가 Qt를 처음 사용하기 때문에 확신 할 수 없지만 여기에 몇 가지 추측이 있습니다. INCLUDEPATH 문자열에 공백이 있음을 확인했습니다. 또한 LIBS + = -Lvisa/lib에는 국회 의사당 L이 있습니다 (정확합니까?). 나는 이것이 당신의 문제이지만 어쩌면 시도할만한 가치가 있다고 말하는 것이 아닙니다. 마지막으로 마음에 떠오르는 점은 Qt Creator를 사용하는 경우 #include "visa.h"만 입력하면 자동 완료 기능으로 완료 할 수 있는지 확인하는 것입니다. 가능한 경우 prob 이상 나머지는 괜찮습니다. 트리거는 Ctrl + Space로 자동 완성됩니다. 나는 경로를 망칠 때 자동 완성이 이런 종류의 일에 좋은 계기라는 것을 알았다.

+0

안녕하세요. 귀하의 답변에 감사드립니다. 1. 처음 시도 할 때 INCLUDEPATH + = "C :/Program Files/National Instruments/Shared/CVI/Include" – Fabio

+0

안녕하세요. 귀하의 답변에 감사드립니다. 1. 처음 시도 할 때 INCLUDEPATH + = "C :/Program Files/National Instruments/Shared/CVI/Include" 하지만 공백은 따옴표로 처리됩니다. 2. 내 두 번째 시도에서 나는 LIBS + = -Lvisa/lib 을 사용하고 대문자 L은 라이브러리 경로를 나타냅니다. 반대로 소문자 l은 라이브러리 이름을 나타냅니다. 3. include 문이 올바른지 확인하십시오. 입력 할 때 드롭 다운 메뉴에 visa.h가 표시됩니다. 여전히 동일한 컴파일 오류가 발생합니다. collect2 : Id가 1을 반환했습니다. 종료 상태 – Fabio

+0

Ahh. 익숙한 것 같습니다. 기억이 안나지만 ... 이전에 실행중인 앱 인스턴스 (명령 줄 콘솔)가 열려있는 동안 컴파일 할 때 오류가 발생했다고 생각합니다. 컴파일을 시도하기 전에 콘솔을 닫아야합니다. 콘솔에 내장 된 Qt 생성자를 사용하는지 확실하지 않습니다. 이 경우 중지 버튼 (빨간색 사각형)을 눌러야 할 수 있습니다. 콘솔 출력을 실제 시스템 콘솔에 설정하는 옵션이 Qt Creator에 있습니다. 어쨌든 모든 것을 콘솔에 내장 할 수있는 것은 아닙니다. 동일한 GUI 응용 프로그램을 만드는 경우 응용 프로그램이 닫혀 있는지 확인하십시오. – user440297

0

NI에서 제공하는 VISA 라이브러리에는 두 가지 유형이 있습니다. 하나는 borland c++으로 컴파일되고 다른 하나는 microsoft vc++으로 컴파일됩니다. Qt는에 관해서는

, 당신은 너무 MSVC에 의해 컴파일 된 visa32.lib을 연결하는, MSVC에 의해 컴파일해야 Qt를 사용할 수 있습니다.그리고 반드시 .dll 대신 .lib을 연결해야하며, VISA의 MSVC 라이브러리는 기본적으로 "C:\Program Files\IVI Foundation\VISA\WinNT\lib\msc"에 있습니다.

기본적으로 포함 디렉터리는 C:\Program Files\IVI Foundation\VISA\WinNT\include입니다.

실제로 위의 정보는 장치 드라이버를 설치 한 후 VISA 예제에서 알 수 있습니다.