저는 C++ 신참입니다. 나는 비자를 사용하여 DLL을 만들고 싶다. 나는 문제를 exe 예제로 단순화했다. 나는 다음과 같은 MnWE있어 :비자 연결을 사용하여 dll/exe를 컴파일하지 못합니다.
#include <cstdlib>
#include <sstream>
#include <string>
#include <iostream>
#include <stdio.h>
#include <stdexcept>
#include <windows.h>
#include "visa.h"
using namespace std;
ViSession defaultRM = 0;
//opens VI-Session in specific address. Puts the defaultRM stuff "away".
void openVI (char* adress, ViSession vi, string mode, int timeout){
if(defaultRM == 0){
viOpenDefaultRM(&defaultRM);// Initialize VISA system
if(defaultRM==0){
cerr << "initalizing defaultRM failed";
}else{
cout << "defaultRM initalized";
}
}else{
}
ViAccessMode viMode = VI_NULL;
ViUInt32 viTimeout = VI_NULL;
if(mode == "EXCLUSIVE"){
viMode = VI_EXCLUSIVE_LOCK;
viTimeout = timeout;
}else if(mode == "DEFAULT"){//Code für default kann hier eingefügt werden. Derzeit nichts vorgesehen.
}else{
}
viOpen(defaultRM, adress, viMode, viTimeout, &vi);
}
int main(){
ViSession vi;
openVI("ASRL2::INSTR", vi, "DEFAULT", 0);
if(vi = 0){
cout << "failed" << endl;
}else{
cout << "success" << endl;
}
return 0;
}
는 GCC와 명령
g++ -static -o VITest.exe VITest.cpp
컴파일 나는 다음과 같은 오류 얻을 :
F:\Users\gabriel\AppData\Local\Temp\ccEx2dRK.o:VITest.cpp:(.text+0x17): undefined reference to `[email protected]'
F:\Users\gabriel\AppData\Local\Temp\ccEx2dRK.o:VITest.cpp:(.text+0xbd): undefined reference to `[email protected]'
collect2.exe: error: ld returned 1 exit status
는 지금까지 내 gooleing이 나를 데리고로를, libs에 연결하는 것과 관련이있는 것으로 보입니다. 나는 내 PC에 애질런트 비자 배포판을 가지고 있지 않다. 나는 visa.h, visadef.h 및 visa.lib를 cpp 파일과 같은 폴더에 넣었습니다. 나는 그것과 함께해야 할 수도 있다고 생각한다. 하지만 꼭 필요한 경우에만 설치하고 싶습니다. 최종 프로그램은 다른 컴퓨터에서 실행됩니다.
: 당신의
g++
라인을 변경합니다. -lvisa32 -Wl, - enable-stdcall-fixup -o test.exe test.cpp'. 나는 이것을 크로스 컴파일러와 함께 리눅스에서 성공적으로 테스트했다.'visa32.dll '의 복사본은'test.cpp' (당신의 코드)와 같은 디렉토리에있다. –