skr*_*obo 1 c++ linker opencv cmake
我正在尝试从与Jetson TX1(Ubuntu 16.04)接口的 Basler 相机访问图像。我正在OpenCV-C++与Pylon图书馆一起使用这样做。我正在尝试链接Pylonusing cmake。我有以下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)
Run Code Online (Sandbox Code Playgroud)
该cmake .命令工作正常,但当我这样做时make,它给出:
fatal error: pylon/Platform.h: No such file or directory
compilation terminated
我检查了上面的文件,它确实与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[])
{
...................................
..................................
}
Run Code Online (Sandbox Code Playgroud)
我想这是包含 Pylon 库的最佳方式。
在 CMakeLists.txt 中定义以这种方式找到 Pylon 库的位置,
find_package(Pylon QUIET)
if (NOT ${Pylon_FOUND})
include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindPylon.cmake")
endif()
Run Code Online (Sandbox Code Playgroud)
这里 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()
Run Code Online (Sandbox Code Playgroud)
然后您可以通过以下方式将 Pylon 包含文件包含到您的 lib 或可执行二进制文件中,
include_directories(
#add other includes directories
${Pylon_INCLUDE_DIRS}
)
Run Code Online (Sandbox Code Playgroud)
同样,您可以通过参考以下链接链接 Pylon Lib 目录:$Pylon_LIBRARIES。希望这对再次进入这个问题的人有所帮助。