0

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.

kremerf
  • 21
  • 5

0 Answers0