簡體   English   中英

使用 GenTL.h 的問題:在 GenIcam 包中找不到對應的庫

[英]Problem using GenTL.h: Can't find the corresponding library in GenIcam Package

我正在開發一個 C++ 控制台應用程序,它允許與符合 GenICam 的工業相機進行通信。 我安裝了最新的 GenICam 包並將其集成到我的項目中。 首先,我收到錯誤消息 C1083:無法打開“GenTL.h”,因此我將此標頭移至包含文件夾並意識到沒有相應的二進制文件。 現在我收到以下錯誤消息:

LNK2001 未解析的外部符號“__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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM