2016-06-09 7 views
0

Я больше новичок 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. Я полагаю, что это может быть связано с этим. Но я только хочу установить его, когда определенно необходимо. Окончательная программа будет работать на другой машине.

+1

Я предлагаю вам проверить связь с 'visa32.dll', например,' г ++ -Wall -О -L. -lvisa32 -Wl, - enable-stdcall-fixup -o test.exe test.cpp'. Я успешно протестировал это на Linux с помощью кросс-компилятора, копия 'visa32.dll' была расположена в том же каталоге, что и' test.cpp' (ваш код). –

ответ

2

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

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

Я пробовал это. Но, насколько я знаю, мне понадобится libvisa.a. Но у меня есть visa.lib. Я просто попробовал, и g ++ говорит: 'e:/mingw/bin /../ lib/gcc/mingw32/4.9.3 /../../../../ mingw32/bin/ld.exe: не может fin d -lvisa collect2.exe: ошибка: ld вернулся 1 статус выхода' – MaestroGlanz

+1

Предполагаю, что вы используете MingGW, это правильно? Более новые версии поддерживают файлы '.lib', поэтому они должны работать. Попробуйте изменить '-l' на' -l: visa.lib', чтобы указать его явно – Smeeheey

+0

Хорошо, хорошо знать. MinGW довольно новый, поэтому он должен работать. Очевидная проблема заключается в том, что он ищет файл в папке MinGW, а не в текущей папке. – MaestroGlanz

 Смежные вопросы

  • Нет связанных вопросов^_^