使用GenTL.h.时出现问题。在GenIcam包中找不到相应的库

问题描述 投票:0回答:1

我正在开发一个C++控制台应用程序,允许与GenICam兼容的工业相机进行通信。我安装了 最新的GenICam软件包 并将其集成到我的项目中。首先我得到了错误信息C1083: Cannot open "GenTL.h",所以我把这个头移到了include文件夹中,然后发现没有对应的二进制文件。现在我得到以下错误信息。

LNK2001 Unresolved external symboll "__imp_GCInitLib".

我不知道如何解决这个问题。我想我需要再集成一个*.lib,但我在软件包中找不到。我是不是遗漏了什么?

谢谢你的帮助

c++ visual-studio-2017 vision lib genicam
1个回答
0
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.