2016-06-09 1 views
0

저는 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 파일과 같은 폴더에 넣었습니다. 나는 그것과 함께해야 할 수도 있다고 생각한다. 하지만 꼭 필요한 경우에만 설치하고 싶습니다. 최종 프로그램은 다른 컴퓨터에서 실행됩니다.

+1

: 당신의 g++ 라인을 변경합니다. -lvisa32 -Wl, - enable-stdcall-fixup -o test.exe test.cpp'. 나는 이것을 크로스 컴파일러와 함께 리눅스에서 성공적으로 테스트했다.'visa32.dll '의 복사본은'test.cpp' (당신의 코드)와 같은 디렉토리에있다. –

답변

2

편집 할 때 라이브러리를 포함하지 않습니다. 난 당신이 예`g ++ -Wall -O -L를 들어, visa32.dll``와 연결 테스트하는 것이 좋습니다

g++ -static -o VITest.exe VITest.cpp -L. -lvisa 
+0

나는 그것을 시험해 보았다. 그러나 내가 아는 한, 나는 libvisa.a가 필요할 것이다. 하지만 비자가 있어요. 입술. 방금 시도해 보니 g ++은 다음과 같이 말합니다 :'e :/mingw/bin /../ lib/gcc/mingw32/4.9.3 /../../../../ mingw32/bin/ld.exe : 할 수 없습니다. 지느러미 d -lvisa collect2.exe : 오류 : ld가 1 종료 상태를 반환했습니다. – MaestroGlanz

+1

MingGW를 사용하고 있는데, 맞습니까? 최신 버전은'.lib' 파일을 지원하므로 제대로 작동합니다. '-l'을'-l : visa.lib'로 변경하여 명시 적으로 지정하십시오. – Smeeheey

+0

알았습니다. MinGW는 꽤 새로 워서 잘 작동합니다. 분명한 문제는 현재 폴더가 아닌 MinGW 폴더에있는 파일을 찾는 것입니다. – MaestroGlanz

관련 문제