c++ - 使用 visa 编译 dll/exe - 链接失败

标签 c++ gcc compilation g++ visa

<分区>

我更像是一个c++菜鸟。我想使用 visa 创建一个 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 而言,它似乎与库的链接有关。我的电脑上还没有 agilent-visa 发行版。我只是将 visa.h、visadef.h 和 visa.lib 放入与 cpp 文件相同的文件夹中。我想,这可能与此有关。但我只想在绝对必要时安装它。最终程序将在另一台机器上运行。

最佳答案

您没有将库包含在您的编译中。将 g++ 行更改为:

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

关于c++ - 使用 visa 编译 dll/exe - 链接失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37723732/

相关文章:

c++ - 有没有一种可靠的方法可以强制线程在 C++ 中停止? (尤其是独立的)

c++ - 在 C++ 中使用 Gdiplus 创建透明位图

c++ - 替换字符会增加一个字符

c++ - 为什么 gcc 和 icc 为 C++ 函数生成具有相同标签名称的 asm?

compilation - 无法为代码::Blocks编译wxWidgets

compilation - 使用 gradle 将 jar 添加到类路径

c++ - 具有概率估计的多类图像分类

gcc - Makefile对于C程序无法正常工作

c - 将指针传递给 C 中的私有(private)结构?

Python threading.Timer 对象在编译为 .exe 时不起作用