Скомпилируйте dll / exe, используя визу - не удается установить связь

Я больше с ++ новичок. Я хочу создать DLL, используя визу. Я упростил проблему до примера exe. У меня есть следующее MnWE:

#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 `viOpenDefaultRM@4'
F:\Users\gabriel\AppData\Local\Temp\ccEx2dRK.o:VITest.cpp:(.text+0xbd): undefined reference to `viOpen@20'
collect2.exe: error: ld returned 1 exit status

Что касается того, как меня привели в заблуждение, похоже, это связано со связью с библиотекарями. У меня еще нет распространения agilent-visa на моем компьютере. Я просто поместил visa.h, visadef.h и visa.lib в ту же папку, что и файл cpp. Я полагаю, что это может быть связано с этим. Но я хочу установить его только тогда, когда это необходимо. Последняя программа будет запущена на другой машине.

1 ответ

Вы не включаете библиотеку в свой сборник. Измени свой g++ линия к:

g++ -static -o VITest.exe VITest.cpp -L. -lvisa
Другие вопросы по тегам