I want to include the software for a video device to my docker-project.
The camera-software is a SDK (https://thermalcapture.com/software-sdk-thermalcapture-grabber-usb/) that I built with make
+ cmake
.
I append the CMakeLists.txt from that SDK here:
set( CMAKE_BUILD_TYPE RelWithDebInfo )
set( CMAKE_CXX_FLAGS "-std=c++11" )
#set( CMAKE_CXX_FLAGS "-fpermissive -std=c++11" )
set( CMAKE_VERBOSE_MAKEFILE on )
set( TARGET thermalgrabber )
set( ROOT ./ )
set( LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/lib )
set( TEAXLIB_VERSION_MAJOR 1 )
set( TEAXLIB_VERSION_MINOR 2 )
set( TEAXLIB_VERSION_PATCH 0 )
set( TEAXLIB_VERSION_STRING ${TEAXLIB_VERSION_MAJOR}.${TEAXLIB_VERSION_MINOR}.${TEAXLIB_VERSION_PATCH} )
#set(USE_FTDI_LIB 1)
cmake_minimum_required(VERSION 2.8)
if (WIN32)
MESSAGE("Setup for windows")
if (USE_FTDI_LIB)
MESSAGE("Using ftdi lib")
ADD_DEFINITIONS(-DUSE_FTDI)
include_directories (
${CMAKE_CURRENT_SOURCE_DIR}/src/inc
)
link_directories (
${CMAKE_CURRENT_SOURCE_DIR}/src/lib/ftdi_i386
)
link_libraries (
ftd2xx
)
elseif (NOT USE_FTDI_LIB)
MESSAGE("Using libusb")
include_directories (
${CMAKE_CURRENT_SOURCE_DIR}/src/inc
)
link_directories (
${CMAKE_CURRENT_SOURCE_DIR}/src/lib/MingGW32/dll
)
link_libraries (
libusb-1.0
)
endif(USE_FTDI_LIB)
elseif (NOT WIN32)
MESSAGE("Setup for linux")
if (USE_FTDI_LIB)
MESSAGE("Not implemented")
elseif (NOT USE_FTDI_LIB)
MESSAGE("Using libusb")
include_directories (
/usr/include/libusb-1.0
/usr/local/include/libusb-1.0
)
link_directories (
/usr/lib/x86_64-linux-gnu
/usr/local/lib
)
link_libraries (
usb-1.0
)
endif (USE_FTDI_LIB)
endif(WIN32)
#unix:CONFIG(release, debug|release): LIBS += -L/usr/include/libusb-1.0 -lusb-1.0
set( SOURCES
${CMAKE_CURRENT_SOURCE_DIR}/src/thermalgrabber.cpp
${CMAKE_CURRENT_SOURCE_DIR}/inc/thermalgrabber.h
${CMAKE_CURRENT_SOURCE_DIR}/src/thermograbber.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/thermograbber.h
${CMAKE_CURRENT_SOURCE_DIR}/src/tauinterface.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/tauinterface.h
${CMAKE_CURRENT_SOURCE_DIR}/src/tauimagedecoder.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/tauimagedecoder.h
${CMAKE_CURRENT_SOURCE_DIR}/src/taucom.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/taucom.h
${CMAKE_CURRENT_SOURCE_DIR}/src/fastftdi.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/fastftdi.h
${CMAKE_CURRENT_SOURCE_DIR}/src/crc.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/crc.h
)
include_directories (
${ROOT}
${THERMALGRABBER}
${CMAKE_CURRENT_BINARY_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/inc # public header
${CMAKE_CURRENT_SOURCE_DIR}/src # internal headers
)
link_directories (
${CMAKE_CURRENT_SOURCE_DIR}/lib
${CMAKE_CURRENT_SOURCE_DIR}/src/lib
#${CMAKE_CURRENT_SOURCE_DIR}/src/lib/ftdi_i386
)
add_library( ${TARGET} SHARED ${SOURCES} )
set_target_properties( ${TARGET} PROPERTIES VERSION ${TEAXLIB_VERSION_STRING} SOVERSION ${TEAXLIB_VERSION_MAJOR} )
install( TARGETS ${TARGET} DESTINATION ${CMAKE_SOURCE_DIR}/lib )
target_link_libraries(
${TARGET}
pthread
)
As far as I know this projects add a library to my system (ubuntu 20.04 on a jetson Xavier NX) via add_library( ${TARGET} SHARED ${SOURCES} )
. This one is named thermalgrabber
as in the header part of the CMakeLists.txt.
Now I want to include this library to my project. The current CMakeLists.txt is as following:
cmake_minimum_required(VERSION 3.6)
project(socket_connection)
set(CMAKE_CXX_STANDARD 17)
add_executable(socket_connection)
find_package(PkgConfig)
pkg_check_modules(GSTREAMER REQUIRED gstreamer-1.0)
find_package(OpenCV REQUIRED)
find_package(PkgConfig REQUIRED)
find_package(Threads REQUIRED)
pkg_check_modules(gstreamer REQUIRED IMPORTED_TARGET gstreamer-1.0)
target_compile_options(socket_connection PUBLIC "$<$<CONFIG:DEBUG>:-g>")
include_directories(socket_connection
${OpenCV_INCLUDE_DIRS}
${GSTREAMER_INCLUDE_DIRS}
)
target_sources(socket_connection
PRIVATE
src/main.cpp
src/tcpSocket.cpp
src/extern/toraw_fileCollector.cpp
)
target_link_libraries(socket_connection
PRIVATE
thermalgrabber
${OpenCV_LIBS}
${GSTREAMER_LIBRARIES}
Threads::Threads
)
I inherited this project and the file and it is working without the thermalgrabber. I tried adding the $TARGET
in the target_link_libraries with the actual name. But I feel like I am missing something as the current error states:
fatal error: thermalgrabber.h: No such file or directory
15 | #include "thermalgrabber.h"
This header-file being used to actual get hold of the camera is not found. So my link seems to be false.
I also tried adding it with find_library
and add_library
:
set( TCGLib thermalgrabber )
find_library(${TCGLib}
NAMES
thermalgrabber
libthermalgrabber
PATHS
/home/xavier/TCG_SDK_2018_02_04/libthermalgrabber/lib
)
add_library(${TCGLib} STATIC IMPORTED)
target_link_libraries(socket_connection
PRIVATE
${OpenCV_LIBS}
${GSTREAMER_LIBRARIES}
Threads::Threads
${TCGLib}
)
I can launch the camera with gst-launch-1.0 v4l2src device/dev/video0 ! some more stuff
After LD_PRELOAD=../libthermalgrabber/lib/libthermgrabber.so ./TCGrabberUSBV4l2d /dev/video0
.
So the lib itself is working with the running example.
Any help in succesfully including said library is very much appreciated.