我正在开发一个C++控制台应用程序,允许与GenICam兼容的工业相机进行通信。我安装了 最新的GenICam软件包 并将其集成到我的项目中。首先我得到了错误信息C1083: Cannot open "GenTL.h",所以我把这个头移到了include文件夹中,然后发现没有对应的二进制文件。现在我得到以下错误信息。
LNK2001 Unresolved external symboll "__imp_GCInitLib".
我不知道如何解决这个问题。我想我需要再集成一个*.lib,但我在软件包中找不到。我是不是遗漏了什么?
谢谢你的帮助
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