![](/img/trans.png)
[英]linking problem on linux (can't find the name of the appropriate library)
[英]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.