Проблема с использованием GenTL.h: Не удается найти соответствующую библиотеку в пакете GenIcam - PullRequest
0 голосов
/ 06 марта 2020

Я работаю над консольным приложением C ++, которое позволяет устанавливать связь с промышленными камерами, совместимыми с GenICam. Я установил последний пакет GenICam и интегрировал его в свой проект. Сначала я получил сообщение об ошибке C1083: Невозможно открыть «GenTL.h», поэтому я переместил этот заголовок в папку include и понял, что нет соответствующего двоичного файла. Теперь я получаю следующее сообщение об ошибке:

LNK2001 Unresolved external symboll "__imp_GCInitLib".

Я не уверен, как это исправить. Я думаю, мне нужно интегрировать еще * .lib, но я не могу найти ни одного в пакете. Я что-то упустил?

Спасибо за любую помощь!

1 Ответ

0 голосов
/ 02 мая 2020

GenICam, или, точнее, GenAPI обрабатывает только перечисление, объединение (между различными поставщиками), представление функций камеры, реализующих GenICam.

GenTL, с другой стороны, абстрагирует транспортный интерфейс и предоставляет стандартизированный набор функции для пользователя.

Итак, если вы хотите работать с функциями камеры (GenAPI), вам сначала нужно поработать с реализацией транспортного уровня для сканирования камер и связи с ними.

Быть частью стандарта означает, что транспортный уровень (GenTL), по крайней мере, предоставляет функции, перечисленные в GenTL.h, но обычно намного больше. Более того, провайдеры GenTL - как вы правильно сказали - обычно это общие библиотеки, предоставляемые производителем, обычно с суффиксом .cti.

. Они могут быть динамически загружены и затем использовать функции. Вот пример использования провайдера Basler GenTL:

#include <GenTL.h>
#include <dlfcn.h>
#include <dirent.h>


int main(){

    // Load DLL at runtime
    void *lib = dlopen("/opt/pylon/lib/pylonCXP/bin/ProducerCXP.cti", RTLD_NOW | RTLD_DEEPBIND);

    // Declare variables with variable definitions from GenTL.h
    GenTL::PGCInitLib GCInitLib;
    GenTL::PGCCloseLib GCCloseLib;

    // Dynamically bind GenTL functions to local function calls
    *reinterpret_cast<void**>(&GCInitLib) = dlsym(lib, "GCInitLib");
    *reinterpret_cast<void**>(&GCCloseLib) = dlsym(lib, "GCCloseLib");      

    GCInitLib(); // Init GenTL provider

    // [Discover cameras, open port, load GenICam, do things]

    GCCloseLib();
}

Затем его можно скомпилировать с помощью

g++ -l ldl main.cpp -o TestGenTL
...