我是c ++新秀。我想用签证创建一个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
就我的gooleing带给我来说,它似乎与链接到libs有关。我的电脑上没有安捷伦签证发行版。我只是将visa.h,visadef.h和visa.lib放入与cpp-file相同的文件夹中。我想,它可能与此有关。但我绝对有必要安装它。最终的程序将在另一台机器上运行。
答案 0 :(得分:2)
您没有将库包含在编辑中。将您的g++
行更改为:
g++ -static -o VITest.exe VITest.cpp -L. -lvisa