Я разрабатываю приложение Windows (7) с помощью Qt (4.7.0) для вызова некоторых методов в DLL (NI visa32.dll) для связи с инструментами через порт GPIB. Также доступен файл заголовка производителя (visa.h).Доступ к NI-VISA из Qt C++ 4.7
В файле проекта, я пытался добавить путь и ссылку на библиотеку в оригинальных местах, где файлы расположены в качестве:
INCLUDEPATH += "C:/Program Files/National Instruments/Shared/CVI/Include"
LIBS += "C:/Windows/System32/visa32.dll"
, но я получаю ошибку компиляции:
collect2: ld returned 1 exit status
Следуя инструкциям в Importing a DLL into 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 каждого объекта в файле, а также удостоверился, что присутствует extern-оператор «C».
Я включил ссылку на файл заголовка в приложении, как:
#include "visa.h"
и обратите внимание, что компилятор не распознает ссылки объекты, принадлежащие к файлу visa.h.
Любая помощь для решения этой ошибки в сборке будет принята с благодарностью.
Я также попытался с помощью Visual C++ (2010), следуя инструкциям DLL References in Visual C++. В этом случае я не получаю никакой ошибки компиляции, но связывание ошибок. Например:
AgiE364X.obj: error LNK2019: unresolved external symbol
"extern "C" long __stdcall viClose(unsigned long)"
является viClose вызываемым методом в NI-VISA.
Я бы предпочел использовать Qt C++ вместо Visual C++.
Заранее спасибо.
Hi. Спасибо за Ваш ответ. 1. В первой попытке я использую INCLUDEPATH + = "C:/Program Files/National Instruments/Shared/CVI/Include" – Fabio
Привет. Спасибо за Ваш ответ. 1. В моей первой попытке я использую INCLUDEPATH + = "C:/Program Files/National Instruments/Shared/CVI/Include" , но пространство позаботится, используя кавычки. 2. Во второй попытке я использую LIBS + = -Lvisa/lib , а капитал L указывает путь к библиотеке. Напротив, нижний регистр l указывает имя библиотеки. 3. Правило включения. Когда я печатаю его, в раскрывающемся меню появляется visa.h. По-прежнему я получаю ту же ошибку компиляции: collect2: Id возвращен 1 статус выхода – Fabio
Ahh. Это звучит знакомо. Я не могу вспомнить ... но я думаю, что я видел эту ошибку при попытке скомпилировать, когда предыдущий запущенный экземпляр вашего приложения (консоль командной строки) открыт. Перед попыткой компиляции убедитесь, что вы закрываете консоль. Не уверен, что вы используете встроенный консоль Qt. В этом случае может потребоваться нажать кнопку остановки (красный квадрат). В Qt Creator есть опция для установки вывода консоли на фактическую системную консоль. Это хороший вариант для выбора, поскольку все равно не все выкладывается на встроенную консоль должным образом. Если вы создаете GUI-приложение, я думаю, что оно все еще выполняется, убедитесь, что приложение закрыто. – user440297