c++ - CMake - 如何将 Pylon 库包含和链接到 OpenCV-C++ 项目

标签 c++ opencv cmake linker

我正在尝试从与 Jetson TX1(Ubuntu 16.04)接口(interface)的 Basler 相机访问图像。我正在使用 OpenCV-C++Pylon 库来执行此操作。我正在尝试使用 cmake 链接 Pylon。我有以下 CMakeLists.txt 文件:

cmake_minimum_required(VERSION 3.5.1)
project(basler_test)
set(CMAKE_CXX_STANDARD 14)
#set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl, -E")
find_package(OpenCV REQUIRED)
include_directories(/opt/pylon5/include)
link_directories(/opt/pylon5/lib64)
add_executable(basler_test basler_test.cpp)
target_link_libraries(basler_test ${OpenCV_LIBS} /opt/pylon5/include/pylon/PylonIncludes.h)

cmake . 命令工作正常,但是当我执行 make 时,它给出:

fatal error :pylon/Platform.h:没有那个文件或目录 编译终止

我检查了上面的文件,它确实存在于与 PylonIncludes.h 相同的目录中。所以,我认为这个错误是因为 CMakeLists.txt 中的某些内容没有正确设置。我没有足够的经验来创建它们来确定问题所在。请帮忙。

这里是源文件的相关部分:basler_test.cpp

//This is a test program to check the functionality of Basler dart daA2500-14uc Camera.  

#define saveImages 0
#define recordVideo 1

#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/video/video.hpp>
#include <pylon/PylonIncludes.h>
#ifdef PYLON_WIN_BUILD
#include <pylon/PylonGUI.h>
#endif

static const uint32_t c_countOfImagesToGrab = 10;

int main(int argc, char* argv[])
{
         ...................................
         ..................................
}

最佳答案

我想这是包含 Pylon 库的最佳方式。

在 CMakeLists.txt 中定义在哪里可以找到 Pylon 库,

find_package(Pylon QUIET)
if (NOT ${Pylon_FOUND})
    include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindPylon.cmake")
endif()

这里FindPylon.cmake可以这样写,

        set(PYLON_ROOT $ENV{PYLON_ROOT})
        if (NOT DEFINED ENV{PYLON_ROOT})
            set(PYLON_ROOT "/opt/pylon5")
        endif()

        set(_PYLON_CONFIG "${PYLON_ROOT}/bin/pylon-config")
        if (EXISTS "${_PYLON_CONFIG}")
            set(Pylon_FOUND TRUE)
            execute_process(COMMAND ${_PYLON_CONFIG} --cflags-only-I OUTPUT_VARIABLE HEADERS_OUT)
            execute_process(COMMAND ${_PYLON_CONFIG} --libs-only-l OUTPUT_VARIABLE LIBS_OUT)
            execute_process(COMMAND ${_PYLON_CONFIG} --libs-only-L OUTPUT_VARIABLE LIBDIRS_OUT)
            string(REPLACE " " ";" HEADERS_OUT "${HEADERS_OUT}")
            string(REPLACE "-I" "" HEADERS_OUT "${HEADERS_OUT}")
            string(REPLACE "\n" "" Pylon_INCLUDE_DIRS "${HEADERS_OUT}")

            string(REPLACE " " ";" LIBS_OUT "${LIBS_OUT}")
            string(REPLACE "-l" "" LIBS_OUT "${LIBS_OUT}")
            string(REPLACE "\n" "" Pylon_LIBRARIES "${LIBS_OUT}")

            string(REPLACE " " ";" LIBDIRS_OUT "${LIBDIRS_OUT}")
            string(REPLACE "-L" "" LIBDIRS_OUT "${LIBDIRS_OUT}")
            string(REPLACE "\n" "" LIBDIRS_OUT "${LIBDIRS_OUT}")

            set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
            foreach (LIBDIR ${LIBDIRS_OUT})
                link_directories(${LIBDIR})
            endforeach()
        else()
            set(Pylon_FOUND FALSE)
        endif()

然后您可以通过以下方式将 Pylon 包含文件包含到您的 lib 或可执行二进制文件中,

include_directories(
        #add other includes directories 
        ${Pylon_INCLUDE_DIRS}
)

同样的方法,你可以引用这个链接 Pylon Lib 目录:$Pylon_LIBRARIES。希望这对再次进入这个问题的人有所帮助。

关于c++ - CMake - 如何将 Pylon 库包含和链接到 OpenCV-C++ 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46551861/

相关文章:

C++:什么时候在最后一条语句之前调用析构函数?

javascript - javascript 中的闭包是否与 C++ 中的类实例(具有私有(private)成员和公共(public)方法)相当?

opencv - 使用opencv检测棋盘上方的手

python - 从图像中提取表格数据

c++ - 在 CMake CMakeLists.txt 中添加对 NewT 的库引用

c++ - new/delete 和 malloc/free 有什么区别?

c++ - 编辑 QDomElement 的值?

xcode - cocoa 应用程序中的 OpenCV Blob 跟踪

build - CMake项目中带有前缀的头文件

c++ - 共享库的 CMake 和订单相关链接