Я больше новичок 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. У меня пока нет распространения рекламной визы на моем компьютере. Я просто положил visa.h, visadef.h и visa.lib в ту же папку, что и файл cpp. Я полагаю, что это может быть связано с этим. Но я только хочу установить его, когда определенно необходимо. Окончательная программа будет работать на другой машине.
Я предлагаю вам проверить связь с 'visa32.dll', например,' г ++ -Wall -О -L. -lvisa32 -Wl, - enable-stdcall-fixup -o test.exe test.cpp'. Я успешно протестировал это на Linux с помощью кросс-компилятора, копия 'visa32.dll' была расположена в том же каталоге, что и' test.cpp' (ваш код). –