使用签证编译dll / exe - 链接失败[重复]
Posted
技术标签:
【中文标题】使用签证编译dll / exe - 链接失败[重复]【英文标题】:Compile dll / exe using visa - linking fails [duplicate] 【发布时间】:2016-06-09 10:44:47 【问题描述】:我更像是一个 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 而言,它似乎与库的链接有关。我的电脑上还没有安捷伦签证发行版。我只是将 visa.h、visadef.h 和 visa.lib 放入与 cpp 文件相同的文件夹中。我想,它可能与那个有关。但我只想在绝对必要的时候安装它。最终程序将在另一台机器上运行。
【问题讨论】:
我建议您测试与visa32.dll
的链接,例如g++ -Wall -O -L. -lvisa32 -Wl,--enable-stdcall-fixup -o test.exe test.cpp
。我使用交叉编译器在 linux 上成功测试了这个,visa32.dll
的副本与test.cpp
(您的代码)位于同一目录中。
【参考方案1】:
您没有将库包含在您的编译中。将您的 g++
行更改为:
g++ -static -o VITest.exe VITest.cpp -L. -lvisa
【讨论】:
我试过了。但据我所知,我需要 libvisa.a。但我确实有 visa.lib。我刚试了一下,g++ 说:e:/mingw/bin/../lib/gcc/mingw32/4.9.3/../../../../mingw32/bin/ld.exe: cannot fin d -lvisa collect2.exe: error: ld returned 1 exit status
我猜你正在使用 MingGW,对吗?较新的版本支持.lib
文件,所以它应该可以工作。尝试将 -l
更改为 -l:visa.lib
以明确指定它
好的,很高兴知道。 MinGW 是相当新的,所以它应该可以工作。明显的问题是,它在 MinGW 文件夹中而不是在当前文件夹中查找文件。
只需添加-L.
即可按照上述编辑对该问题进行排序
到目前为止非常感谢:但它仍然不起作用。我假设它指的是缺少的 dll 或 lib。我仍然收到此错误消息:F:\Users\name\AppData\Local\Temp\ccdzAEIg.o:VITest.cpp:(.text+0x17): undefine d reference to
viOpenDefaultRM@4' F:\Users\name\AppData\Local\Temp\ccdzAEIg.o:VITest.cpp:(.text+0xbd): undefine d reference to viOpen@20' collect2.exe: error: ld returned 1 exit status
以上是关于使用签证编译dll / exe - 链接失败[重复]的主要内容,如果未能解决你的问题,请参考以下文章