Я разрабатываю приложение для Windows (7), использующее Qt (4.7.0) для вызова некоторых методов в DLL (NI visa32.dll) для связи с приборами через порт GPIB.Также доступен файл заголовка производителя (visa.h).
В файле проекта я попытался добавить путь и ссылку на библиотеку к исходным местам, где расположены файлы, как:
INCLUDEPATH += "C:/Program Files/National Instruments/Shared/CVI/Include"
LIBS += "C:/Windows/System32/visa32.dll"
но я получаю ошибку компиляции:
collect2: ld returned 1 exit status
Следуя инструкциям в Импортируя DLL в Qt , я создал "visa.a" из "visa32.dll"", и скопировал их в подпапку" visa / lib "и добавил путь и библиотеку в файл проекта:
INCLUDEPATH += visa/include
LIBS += -Lvisa/lib
LIBS += -lvisa.a
Я пробовал также с -lvisa
или -lvisa.dll
, но во всехВ некоторых случаях я получаю еще одну ошибку компиляции, говорящую о том, что -lvisa
, -lvisa.a
или -lvisa.dll
не найден.Я отредактировал исходный файл заголовка "visa.h" и добавил префикс Q_DECL_IMPORT для каждого объекта в файле, а также убедился, что присутствует внешний оператор "C".
Я включил ссылку на файл заголовкав приложении:
#include "visa.h"
и обратите внимание, что компилятор распознает ссылочные объекты, принадлежащие файлу visa.h.
Любая помощь в устранении этой ошибки компиляции будет принята с благодарностью.
Я также пытался с Visual C ++ (2010), следуя инструкциям Ссылки DLL в Visual C ++ .В этом случае я не получаю никакой ошибки компиляции, но связываю ошибки.Например:
AgiE364X.obj: error LNK2019: unresolved external symbol
"extern "C" long __stdcall viClose(unsigned long)"
, являющийся viClose вызываемого метода в NI-VISA.
Я бы предпочел использовать Qt C ++ вместо Visual C ++.
Заранее спасибо.