Cross Compiling with ROS and DriveWorks

My Drive AGX application requires streaming frames from a GMSL camera into ROS.

In the absence of NvROS for Drive Software 10.0, I need to cross compile a binary that includes both the DriveWorks libraries and the ROS libraries.

I have not found success with any published processes (everyone who tries this seems to have different issues), so I’m looking for support.

So far, I’ve followed the tutorial from VickNV (https://devtalk.nvidia.com/default/topic/1070613/faq/ros-how-to-cross-compile-ros-for-drive-agx-developer-kit-with-drive-software-10-0/) on cross compiling ROS from source for the target. This worked for me (with a few nontrivial tweaks), and the cross compiled ROS runs on my target.

I can also cross compile the DriveWorks samples on my host and run those on the target.

So, I figure it should be simple to cross compile a binary that includes both ROS and DriveWorks, if I can deal with each separately – but this hasn’t been the case.

Below are the two strategies I’ve tried and what’s going wrong with each:

1. Including Cross Compiled ROS Libraries from the DriveWorks samples

My cross compiled ROS is in ~/ros_catkin_ws on the host. I tried modifying the CMakeLists.txt for the hello_world sample to include the ROS that I cross compiled, like this:

# Copyright (c) 2016, NVIDIA CORPORATION.  All rights reserved.

project(sample_hello_world C CXX)

include_directories(
    ${VIBRANTE_PDK}/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/include
  # ${VIBRANTE_PDK}/targetfs_a/usr/include/aarch64-linux-gnu
)
link_directories(
    ${VIBRANTE_PDK}/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib
  # ${VIBRANTE_PDK}/targetfs_a/usr/lib/aarch64-linux-gnu
)
## Find catkin and any catkin packages
# find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs genmsg)

## Declare a catkin package
# catkin_package()

#-------------------------------------------------------------------------------
# Project files
#-------------------------------------------------------------------------------
set(PUBLIC_DOCS
    README.md
)

set(SOURCES
    main.cpp
)

# include_directories(
# ${catkin_INCLUDE_DIRS}
# )

set(LIBRARIES
    samples_framework
    ${Driveworks_LIBRARIES}
    roscpp
)

#-------------------------------------------------------------------------------
# Final target
#-------------------------------------------------------------------------------
add_executable(${PROJECT_NAME} ${SOURCES})
target_link_libraries(${PROJECT_NAME} PRIVATE ${LIBRARIES})
set_property(TARGET ${PROJECT_NAME} PROPERTY FOLDER "Samples")

# ------------------------------------------------------------------------------
# Install target
# ------------------------------------------------------------------------------
sdk_add_sample(${PROJECT_NAME})

I run this cmake command to set up the system for cross compilation:

sudo cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-V5L.cmake -DVIBRANTE_PDK:STRING=/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux ..

and it produces this output:

-- VIBRANTE_PDK = /home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux
-- VIBRANTE_PDK_DEVICE = t186ref
-- VIBRANTE_PDK_BRANCH = 5.1.6.1
-- Vibrante version 5.1.6.1
-- VIBRANTE_PDK = /home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux
-- Vibrante version 5.1.6.1
-- The C compiler identification is GNU 7.3.1
-- The CXX compiler identification is GNU 7.3.1
-- Check for working C compiler: /home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/../toolchains/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc
-- Check for working C compiler: /home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/../toolchains/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/../toolchains/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++
-- Check for working CXX compiler: /home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/../toolchains/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found CUDA: /home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/usr/local/cuda (found version "10.2") 
-- Found PkgConfig: /usr/bin/pkg-config (found version "0.29.1") 
-- Found EGL: /home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/lib-target/libEGL.so  
-- Found /home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/lib-target/libEGL.so:
--  - Includes: [/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/include]
--  - Libraries: [/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/lib-target/libEGL.so]
-- Found: /home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/lib-target/libdrm.so
-- Header at: /home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/include
-- DW_EXPERIMENTAL_FORCE_EGL set and EGL Support Enabled
-- Cross Compiling for Vibrante
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Looking for pthread_create
-- Looking for pthread_create - not found
-- Looking for pthread_create in pthreads
-- Looking for pthread_create in pthreads - not found
-- Looking for pthread_create in pthread
-- Looking for pthread_create in pthread - found
-- Found Threads: TRUE  
-- Default - Building with TRT version 5.1.4.2 and cudnn version 7.5.1.14
-- Building GLFW for X11 (static)
-- Looking for XOpenDisplay in /home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/lib-target/libX11.so;/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/lib-target/libXext.so
-- Looking for XOpenDisplay in /home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/lib-target/libX11.so;/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/lib-target/libXext.so - found
-- Looking for gethostbyname
-- Looking for gethostbyname - found
-- Looking for connect
-- Looking for connect - found
-- Looking for remove
-- Looking for remove - found
-- Looking for shmat
-- Looking for shmat - found
-- Looking for IceConnectionNumber in ICE
-- Looking for IceConnectionNumber in ICE - not found
-- Found X11: /home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/lib-target/libX11.so
-- VIBRANTE_PDK_BRANCH = 5.1.6.1
-- Found vibrante lib: /usr/local/driveworks-2.2/samples/3rdparty/linux-aarch64/vibrante/lib/libudev.so
-- Found vibrante lib: /usr/local/driveworks-2.2/samples/3rdparty/linux-aarch64/vibrante/lib/libusb-1.0.so
-- Found vibrante_Xlib: /usr/local/driveworks-2.2/samples/3rdparty/linux-aarch64/vibrante_Xlibs/lib/libXcursor.so
-- Driveworks Samples install dir: /usr/local/driveworks-2.2/samples/build/install
-- Cross Compiling for Vibrante
-- Driveworks found at: /home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/usr/local/driveworks-2.2/targets/aarch64-Linux
-- Found Driveworks 
-- Configuring done
-- Generating done
-- Build files have been written to: /usr/local/driveworks-2.2/samples/build

Then I run sudo make -j and I get tons of errors:

/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/toolchains/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/../lib/gcc/aarch64-linux-gnu/7.3.1/../../../../aarch64-linux-gnu/bin/ld: warning: liblog4cxx.so.10, needed by /home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/libroscpp.so, not found (try using -rpath or -rpath-link)
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/toolchains/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/../lib/gcc/aarch64-linux-gnu/7.3.1/../../../../aarch64-linux-gnu/bin/ld: warning: libboost_regex.so.1.65.1, needed by /home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/libroscpp.so, not found (try using -rpath or -rpath-link)
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/toolchains/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/../lib/gcc/aarch64-linux-gnu/7.3.1/../../../../aarch64-linux-gnu/bin/ld: warning: libboost_system.so.1.65.1, needed by /home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/libroscpp.so, not found (try using -rpath or -rpath-link)
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/toolchains/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/../lib/gcc/aarch64-linux-gnu/7.3.1/../../../../aarch64-linux-gnu/bin/ld: warning: libboost_thread.so.1.65.1, needed by /home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/libroscpp.so, not found (try using -rpath or -rpath-link)
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/toolchains/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/../lib/gcc/aarch64-linux-gnu/7.3.1/../../../../aarch64-linux-gnu/bin/ld: warning: libboost_chrono.so.1.65.1, needed by /home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/libroscpp.so, not found (try using -rpath or -rpath-link)
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/toolchains/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/../lib/gcc/aarch64-linux-gnu/7.3.1/../../../../aarch64-linux-gnu/bin/ld: warning: libboost_date_time.so.1.65.1, needed by /home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/libroscpp.so, not found (try using -rpath or -rpath-link)
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/toolchains/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/../lib/gcc/aarch64-linux-gnu/7.3.1/../../../../aarch64-linux-gnu/bin/ld: warning: libboost_atomic.so.1.65.1, needed by /home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/libroscpp.so, not found (try using -rpath or -rpath-link)
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/toolchains/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/../lib/gcc/aarch64-linux-gnu/7.3.1/../../../../aarch64-linux-gnu/bin/ld: warning: libconsole_bridge.so.0.4, needed by /home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/libroscpp.so, not found (try using -rpath or -rpath-link)
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/toolchains/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/../lib/gcc/aarch64-linux-gnu/7.3.1/../../../../aarch64-linux-gnu/bin/ld: warning: libboost_filesystem.so.1.65.1, needed by /home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/libroscpp.so, not found (try using -rpath or -rpath-link)
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/toolchains/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/../lib/gcc/aarch64-linux-gnu/7.3.1/../../../../aarch64-linux-gnu/bin/ld: warning: libboost_signals.so.1.65.1, needed by /home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/libroscpp.so, not found (try using -rpath or -rpath-link)
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/toolchains/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/../lib/gcc/aarch64-linux-gnu/7.3.1/../../../../aarch64-linux-gnu/bin/ld: warning: libEGL.so.1, needed by /home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/usr/local/driveworks-2.2/targets/aarch64-Linux/lib/libnvinfer.so.5, not found (try using -rpath or -rpath-link)
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole.so: undefined reference to `boost::match_results<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > >::maybe_assign(boost::match_results<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > > const&)'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole_log4cxx.so: undefined reference to `log4cxx::spi::OptionHandler::getClass() const'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/libroscpp.so: undefined reference to `boost::thread::start_thread_noexcept()'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole.so: undefined reference to `typeinfo for log4cxx::helpers::ObjectPtrBase'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/libroscpp.so: undefined reference to `boost::thread::detach()'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/libroscpp.so: undefined reference to `boost::detail::thread_data_base::~thread_data_base()'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole_log4cxx.so: undefined reference to `log4cxx::helpers::Object::getClass() const'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole_log4cxx.so: undefined reference to `virtual thunk to log4cxx::AppenderSkeleton::releaseRef() const'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/libroscpp.so: undefined reference to `boost::thread::hardware_concurrency()'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole_log4cxx.so: undefined reference to `typeinfo for log4cxx::helpers::ObjectImpl'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole.so: undefined reference to `log4cxx::Level::getWarn()'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole_log4cxx.so: undefined reference to `log4cxx::Logger::getLogger(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole_log4cxx.so: undefined reference to `log4cxx::AppenderSkeleton::setOption(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole_log4cxx.so: undefined reference to `log4cxx::File::~File()'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole_log4cxx.so: undefined reference to `log4cxx::helpers::ObjectPtrBase::exchange(void**, void*)'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole.so: undefined reference to `boost::re_detail_106501::cpp_regex_traits_implementation<char>::transform_primary[abi:cxx11](char const*, char const*) const'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole_log4cxx.so: undefined reference to `log4cxx::spi::LocationInfo::getMethodName[abi:cxx11]() const'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole_log4cxx.so: undefined reference to `log4cxx::File::File(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/libroscpp.so: undefined reference to `boost::thread::native_handle()'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole_log4cxx.so: undefined reference to `log4cxx::Logger::getLogger(char const*)'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/libroscpp.so: undefined reference to `boost::filesystem::detail::system_complete(boost::filesystem::path const&, boost::system::error_code*)'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/libroscpp.so: undefined reference to `boost::system::system_category()'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole_log4cxx.so: undefined reference to `log4cxx::helpers::Mutex::~Mutex()'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole.so: undefined reference to `log4cxx::helpers::Object::getStaticClass()'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/libroscpp.so: undefined reference to `boost::filesystem::detail::create_directory(boost::filesystem::path const&, boost::system::error_code*)'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole.so: undefined reference to `log4cxx::Level::getInfo()'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole_log4cxx.so: undefined reference to `log4cxx::helpers::ObjectImpl::~ObjectImpl()'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole_log4cxx.so: undefined reference to `log4cxx::spi::LocationInfo::LocationInfo(char const*, char const*, int)'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole_log4cxx.so: undefined reference to `log4cxx::spi::OptionHandler::getStaticClass()'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/libroscpp.so: undefined reference to `boost::this_thread::interruption_point()'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole_log4cxx.so: undefined reference to `log4cxx::AppenderSkeleton::getClass() const'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole.so: undefined reference to `boost::re_detail_106501::raise_runtime_error(std::runtime_error const&)'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole_log4cxx.so: undefined reference to `log4cxx::Appender::getClass() const'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/libroscpp.so: undefined reference to `boost::detail::set_tss_data(void const*, boost::shared_ptr<boost::detail::tss_cleanup_function>, void*, bool)'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/libroscpp.so: undefined reference to `boost::thread::thread()'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole_log4cxx.so: undefined reference to `log4cxx::helpers::Pool::~Pool()'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole.so: undefined reference to `log4cxx::Level::getDebug()'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole_log4cxx.so: undefined reference to `log4cxx::Logger::getRootLogger()'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole_log4cxx.so: undefined reference to `log4cxx::Appender::getStaticClass()'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole_log4cxx.so: undefined reference to `log4cxx::AppenderSkeleton::clearFilters()'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole.so: undefined reference to `log4cxx::Level::getError()'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole_log4cxx.so: undefined reference to `virtual thunk to log4cxx::helpers::ObjectImpl::addRef() const'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole.so: undefined reference to `log4cxx::helpers::ObjectPtrBase::~ObjectPtrBase()'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole_log4cxx.so: undefined reference to `log4cxx::AppenderSkeleton::releaseRef() const'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/libroscpp.so: undefined reference to `vtable for boost::detail::thread_data_base'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole_log4cxx.so: undefined reference to `log4cxx::Logger::getLoggerRepository() const'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/libcpp_common.so: undefined reference to `console_bridge::log(char const*, int, console_bridge::LogLevel, char const*, ...)'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/libroscpp.so: undefined reference to `boost::detail::get_current_thread_data()'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole_log4cxx.so: undefined reference to `log4cxx::helpers::ObjectPtrBase::ObjectPtrBase()'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/libroscpp.so: undefined reference to `boost::chrono::steady_clock::now()'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/libroscpp.so: undefined reference to `boost::thread::joinable() const'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole.so: undefined reference to `boost::re_detail_106501::get_default_error_string(boost::regex_constants::error_type)'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole.so: undefined reference to `log4cxx::Level::getFatal()'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole_log4cxx.so: undefined reference to `log4cxx::Logger::isEnabledFor(log4cxx::helpers::ObjectPtrT<log4cxx::Level> const&) const'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole_log4cxx.so: undefined reference to `typeinfo for log4cxx::Appender'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole_log4cxx.so: undefined reference to `log4cxx::helpers::ObjectImpl::ObjectImpl()'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/libroscpp.so: undefined reference to `boost::filesystem::path::parent_path() const'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole.so: undefined reference to `boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::do_assign(char const*, char const*, unsigned int)'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole_log4cxx.so: undefined reference to `typeinfo for log4cxx::AppenderSkeleton'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/libroscpp.so: undefined reference to `boost::this_thread::disable_interruption::disable_interruption()'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole_log4cxx.so: undefined reference to `log4cxx::AppenderSkeleton::addFilter(log4cxx::helpers::ObjectPtrT<log4cxx::spi::Filter> const&)'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole_log4cxx.so: undefined reference to `virtual thunk to log4cxx::helpers::ObjectImpl::releaseRef() const'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole.so: undefined reference to `boost::re_detail_106501::put_mem_block(void*)'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/libroscpp.so: undefined reference to `typeinfo for boost::detail::thread_data_base'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole.so: undefined reference to `boost::re_detail_106501::verify_options(unsigned int, boost::regex_constants::_match_flags)'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole_log4cxx.so: undefined reference to `log4cxx::AppenderSkeleton::doAppend(log4cxx::helpers::ObjectPtrT<log4cxx::spi::LoggingEvent> const&, log4cxx::helpers::Pool&)'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole_log4cxx.so: undefined reference to `log4cxx::spi::LocationInfo::getFileName() const'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/libroscpp.so: undefined reference to `boost::detail::get_tss_data(void const*)'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole_log4cxx.so: undefined reference to `log4cxx::AppenderSkeleton::addRef() const'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole.so: undefined reference to `log4cxx::Level::getStaticClass()'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole_log4cxx.so: undefined reference to `virtual thunk to log4cxx::AppenderSkeleton::addRef() const'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole_log4cxx.so: undefined reference to `log4cxx::PropertyConfigurator::configure(log4cxx::File const&)'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole_log4cxx.so: undefined reference to `typeinfo for log4cxx::spi::OptionHandler'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole_log4cxx.so: undefined reference to `log4cxx::Logger::forcedLog(log4cxx::helpers::ObjectPtrT<log4cxx::Level> const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, log4cxx::spi::LocationInfo const&) const'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/libroscpp.so: undefined reference to `boost::this_thread::disable_interruption::~disable_interruption()'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole.so: undefined reference to `boost::re_detail_106501::perl_matcher<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::construct_init(boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > > const&, boost::regex_constants::_match_flags)'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole_log4cxx.so: undefined reference to `log4cxx::helpers::ObjectImpl::releaseRef() const'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/libroscpp.so: undefined reference to `boost::thread::join_noexcept()'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole.so: undefined reference to `boost::re_detail_106501::cpp_regex_traits_implementation<char>::transform[abi:cxx11](char const*, char const*) const'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole.so: undefined reference to `boost::re_detail_106501::get_mem_block()'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/libroscpp.so: undefined reference to `boost::system::generic_category()'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole_log4cxx.so: undefined reference to `log4cxx::helpers::ObjectImpl::addRef() const'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole_log4cxx.so: undefined reference to `log4cxx::AppenderSkeleton::AppenderSkeleton()'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/libroscpp.so: undefined reference to `boost::this_thread::yield()'
/home/nvidia/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/targetfs_a/home/nvidia/ros_catkin_ws/install_isolated/lib/librosconsole_log4cxx.so: undefined reference to `log4cxx::spi::LocationInfo::getLineNumber() const'
collect2: error: ld returned 1 exit status
src/hello_world/CMakeFiles/sample_hello_world.dir/build.make:117: recipe for target 'src/hello_world/sample_hello_world' failed

I don’t know how to proceed with this strategy, so I tried this:

2. Including DriveWorks libraries from catkin_make_isolated

I tried modifying the CMakeLists.txt of a sample ROS node to include CUDA:

cmake_minimum_required(VERSION 2.8.3)
project(talker)

## Compile as C++11, supported in ROS Kinetic and newer
# add_compile_options(-std=c++11)

## Find catkin macros and libraries
## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
## is used, also find other catkin packages
find_package(catkin REQUIRED COMPONENTS
  roscpp
  rospy
  std_msgs
)

find_package(CUDA REQUIRED)

###########
## Build ##
###########

## Specify additional locations of header files
## Your package locations should be listed before other locations
include_directories(
# include
  ${catkin_INCLUDE_DIRS}
)

## Declare a C++ executable
## With catkin_make all packages are built within a single CMake context
## The recommended prefix ensures that target names across packages don't collide
add_executable(${PROJECT_NAME}_node src/talker.cpp)

## Rename C++ executable without prefix
## The above recommended prefix causes long target names, the following renames the
## target back to the shorter version for ease of user use
## e.g. "rosrun someones_pkg node" instead of "rosrun someones_pkg someones_pkg_node"
set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX "")

## Add cmake target dependencies of the executable
## same as for the library above
add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})

## Specify libraries to link a library or executable target against
target_link_libraries(${PROJECT_NAME}_node
  ${catkin_LIBRARIES}
)

I tried to build this inside the folder where I ran catkin_make_isolated to cross compile ROS:

./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=/home/nvidia/ros_catkin_ws/Toolchain-V5L.cmake

And I get this error:

CMake Error at /usr/share/cmake-3.10/Modules/FindPackageHandleStandardArgs.cmake:137 (message):
  Could NOT find CUDA (missing: CUDA_TOOLKIT_ROOT_DIR CUDA_INCLUDE_DIRS
  CUDA_CUDART_LIBRARY) (found version "10.2")
Call Stack (most recent call first):
  /usr/share/cmake-3.10/Modules/FindPackageHandleStandardArgs.cmake:378 (_FPHSA_FAILURE_MESSAGE)
  /usr/share/cmake-3.10/Modules/FindCUDA.cmake:1080 (find_package_handle_standard_args)
  CMakeLists.txt:16 (find_package)


-- Configuring incomplete, errors occurred!
See also "/home/nvidia/ros_catkin_ws/build_isolated/talker/CMakeFiles/CMakeOutput.log".
See also "/home/nvidia/ros_catkin_ws/build_isolated/talker/CMakeFiles/CMakeError.log".
Makefile:574: recipe for target 'cmake_check_build_system' failed
make: *** [cmake_check_build_system] Error 1
<== Failed to process package 'talker': 
  Command '['/home/nvidia/ros_catkin_ws/install_isolated/env.sh', 'make', 'cmake_check_build_system']' returned non-zero exit status 2

Reproduce this error by running:
==> cd /home/nvidia/ros_catkin_ws/build_isolated/talker && /home/nvidia/ros_catkin_ws/install_isolated/env.sh make cmake_check_build_system

Command failed, exiting.

I’d appreciate any support, this process hasn’t been straightforward and I don’t know how to proceed.

It would be an enormous help – not just to me, but to everyone trying to do the same thing – if NVIDIA could share a sample program that includes ROS and DriveWorks including the build system (samples for each on their own exist, but not together in one binary), or release a version of NvROS compatible with Drive Software 10.0.

Hi evanmt03s,

We’ll take a look at the issues you encountered and see how we can help. Thanks!

Please provide your commands and full output of them. Thanks!

Hi , I am having the same problem with ros+dw after cross compiling ros. Is there any update on this?

Thanks
Allen

@servanti Unfortunately I completely gave up on cross-compiling the Driveworks libraries and ROS in the same executable. Nothing was working for me.

Instead I decided to use inter-process communication (shared memory) to transfer data between two executables running on the NVIDIA Drive – one using the Driveworks libraries (cross-compiled on an x86 host) and one using ROS (directly compiled on the NVIDIA Drive). This has been working fine, and it sidesteps the cross-compilation issues.

It would be nice if the cross-compilation issues were resolved, since I don’t think this is an outlandish use case, but shared memory IPC is good enough for me.

hi @evanmt03s, thank you so much for the reply. Yes I am reaching the same conclusion. ROS cross compilation is just not working. I also considered two separate process , one dealing with sensors (camera, LIDAR etc) using SAL in DW and the ROS side, using shared memory or bandwidth permitting some sort of socket client/server but I think as you have mentioned , shared memory is better. It’s just that I was hoping not to use the AGX as a development platform and just for deployment. I think I will go in the same direction as you, unless of course we get a resolution from NVIDIA. Thanks again for the response.

Well, the answer to your first question, method #1 seems pretty clear given the output. It can’t find Boost SOs because the toolchain isn’t pointed to whichever sysroot directory you installed Boost into. For this to actually work, you need to actually understand every line in that CMake toolchain file, otherwise you’re just going to run in circles.

Now, you should approach this from first principles with Method #2. First, don’t put the “catkin_ws” in the targetfs. That’s a bad idea. Second, open the CMake toolchain file from your catkin_ws, which I think is the one from the “Cross Compile ROS” thread, right? In your error above it’s telling you the FindCUDA script isn’t working. Read that CMake script, and it tells you the environment variables to set in order to fix this issue, probably exporting CUDA_PATH will solve your problem. Second, you’re going to have to tell the compiler where DriveWorks OS libraries are located if you want to link DriveWorks OS libraries. Compare the CMake toolchain file specified in “Cross Compile ROS” with the one in the Driveworks Samples directory. The former doesn’t have anything about “VIBRANTE_PDK”. The stuff at the bottom is what you need to look at. Pay attention to the CMAKE_[TYPE]_LINKER_FLAGS variables.
Good luck!

@ChrisB I appreciate your help, maybe this will be helpful for others who are running into the same issues. For my use case, though, I found a way to sidestep this issue and I’m not trying to cross-compile ROS with Driveworks anymore.

I gave up in part because I’m not that familiar with CMake (you’re right, I don’t understand every line in the CMake toolchain file) and it was faster for me to just modify the sample executables to get what I needed.

hi @evanmt03s, I seem to have finally gotten this to work, cross compiling DW with ros calls all on the host. Let me do some tests and I will report back and tell you at least what I had to do.

Hi @servanti,

I am also trying to compile DW within a catkin_ws. Do you have any update regarding the topic?

Thank you.

Hi @otemiz1,

I dont know what problem you are facing now. But basically you should let catkin build by searching paths under ~/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_DDPX/DRIVEOS/drive-t186ref-linux/targetfs_a for libraries and include files, e.g. below paths for libraries:

~/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_DDPX/DRIVEOS/drive-t186ref-linux/targetfs_a/usr/lib/aarch64-linux-gnu

~/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_DDPX/DRIVEOS/drive-t186ref-linux/targetfs_a/lib/aarch64-linux-gnu

~/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_DDPX/DRIVEOS/drive-t186ref-linux/targetfs_a/usr/local/cuda/targets/aarch64-linux/lib

~/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_DDPX/DRIVEOS/drive-t186ref-linux/targetfs_a/usr/local/driveworks/targets/aarch64-Linux/lib

You can use necessary header files and libraries paths in cmake toolchain file or call include_directories() in CMakeLists.txt for catkin.

Thanks!