I followed the guide :https://developer.nvidia.com/drive/learn/tutorial-hostcompilation
After which I was able to compile my project on the host successfully and the binary worked as intended.
Now I want to cross compile to deploy the binary on to the target. On cross compiling it detects the libraries and their paths but, skips them and says they are incompatible.
I am using the guide https://developer.nvidia.com/drive/learn/tutorial-xcompilation.
I tried linking the libraries using the link_directories().
I even tried including the full path to the libraries in the set(LIBRARIES) on doing this I recived the Error : ~/libdriveworks.so Error adding symbols: File in wrong format
If compatibility is the issue how can i make external libraries of the type aarch64?
Here is my project tree
├── 3rdparty
│ ├── linux-aarch64
│ ├── linux-x86
│ └── src
├── build_host
│ ├── 3rdparty
│ ├── CMakeCache.txt
│ ├── CMakeFiles
│ ├── cmake_install.cmake
│ ├── install
│ ├── install_manifest.txt
│ ├── Makefile
│ └── src
├── build_target
│ ├── 3rdparty
│ ├── CMakeCache.txt
│ ├── CMakeFiles
│ ├── cmake_install.cmake
│ ├── Makefile
│ └── src
├── cmake
│ ├── ArchConfiguration.cmake
│ ├── CMakeParseArguments.cmake
│ ├── CommonConfiguration.cmake
│ ├── ExpandDependencyTree.cmake
│ ├── FindCUDA
│ ├── FindCUDA.cmake
│ ├── FindDriveworks.cmake
│ ├── FindDRM.cmake
│ ├── FindEGL.cmake
│ ├── FindGLES.cmake
│ ├── FindPackageHandleStandardArgs.cmake
│ ├── FindPackageMessage.cmake
│ ├── IncludeTargetDirectories.cmake
│ ├── LibFindMacros.cmake
│ ├── ResourcesConfiguration.cmake
│ ├── Samples3rdparty.cmake
│ ├── SamplesConfiguration.cmake
│ ├── SamplesInstallConfiguration.cmake
│ ├── SamplesSetBuildType.cmake
│ ├── Toolchain-V5L.cmake
│ ├── Toolchain-V5Q.cmake
│ └── UploadVibrante.cmake
├── CMakeLists.txt
└── src
└── TV_C2
My CMakeLists.txt file in the main folder
cmake_minimum_required(VERSION 3.10 FATAL_ERROR)
#-------------------------------------------------------------------------------
# Set basic configurations
#-------------------------------------------------------------------------------
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
include(SamplesSetBuildType) # Set the build type before project is created
set(SDK_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
set(SDK_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
#-------------------------------------------------------------------------------
# Root project
#-------------------------------------------------------------------------------
project(DriveworksSDK-Samples C CXX)
#-------------------------------------------------------------------------------
# System packages
#-------------------------------------------------------------------------------
find_package(CUDA REQUIRED)
find_package(EGL)
#-------------------------------------------------------------------------------
# Basic configuration
#-------------------------------------------------------------------------------
include(ArchConfiguration)
include(CommonConfiguration)
include(SamplesConfiguration)
include(ResourcesConfiguration)
include(Samples3rdparty)
include(SamplesInstallConfiguration)
include(ExpandDependencyTree)
include(IncludeTargetDirectories)
include(UploadVibrante)
set(SDK_BINARY_DIR ${CMAKE_BINARY_DIR})
#-------------------------------------------------------------------------------
# Driveworks SDK
#-------------------------------------------------------------------------------
find_package(Driveworks REQUIRED)
include_directories(${Driveworks_INCLUDE_DIR})
list(APPEND Driveworks_LIBRARIES
${CUDA_LIBRARIES}
${CUDA_cublas_LIBRARY}
samples_allocator)
if(LINUX)
list(APPEND Driveworks_LIBRARIES)
elseif(VIBRANTE)
list(APPEND Driveworks_LIBRARIES ${vibrante_LIBRARIES} ${vibrante_Xlibs_LIBRARIES} nvmedia ${EGL_LIBRARIES})
endif()
#-------------------------------------------------------------------------------
# Samples
#-------------------------------------------------------------------------------
if(CMAKE_CROSSCOMPILING)
set(DRIVEWORKS_DATAPATH "../data")
else()
set(DRIVEWORKS_DATAPATH "${CMAKE_CURRENT_LIST_DIR}/../data")
endif()
file(GLOB ADDITIONAL_SAMPLES "CMakeListsSamples*.txt")
foreach(ADDITIONAL_SAMPLE ${ADDITIONAL_SAMPLES})
include(${ADDITIONAL_SAMPLE})
endforeach()
set(PROJECTS TV_C2)
foreach(PROJECT ${PROJECTS})
add_subdirectory(src/${PROJECT})
endforeach()
#-------------------------------------------------------------------------------
# Cuda dependencies
#-------------------------------------------------------------------------------
# Create a target to update cuda dependencies
add_cuda_dependencies_target(update_cuda_deps ON)
set_property(TARGET update_cuda_deps PROPERTY FOLDER "Support")
My CMakelists.txt file in the project folder (src/TV_C2/)
# Copyright (c) 2016-2019 NVIDIA CORPORATION. All rights reserved.
cmake_minimum_required(VERSION 3.10 FATAL_ERROR)
# Project name and languages
project(TV_C2 C CXX)
# Set Public documents
set(PUBLIC_DOCS
README.md
)
# Set Libraries
set(LIBRARIES
driveworks
osqp
)
# Set Directories for including and linking
set(DIR
/usr/local/driveworks/include/
/usr/local/include/osqp/
)
link_directories(
${CMAKE_CURRENT_SOURCE_DIR}
/usr/local/driveworks/lib/
)
# Source Files
file(GLOB_RECURSE SOURCECXX *.cpp)
file(GLOB_RECURSE SOURCECC *.c)
file(GLOB_RECURSE HEADERS *.h)
# Add Executable
add_executable(${PROJECT_NAME} ${SOURCECC} ${SOURCECXX} ${HEADERS})
# Add Directories
target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} PUBLIC ${DIR})
# Add Libraries
target_link_libraries(${PROJECT_NAME} PRIVATE ${LIBRARIES})
sdk_add_sample(${PROJECT_NAME})
My build_target command :
cmake -DCMAKE_BUILD=Release \
-DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-V5L.cmake \
-DVIBRANTE_PDK:STRING=/home/aj/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux \
..
Logs from running the above :
CMake Warning at cmake/SamplesSetBuildType.cmake:19 (message):
CMAKE_BUILD_TYPE not defined. Using Release as default.
Call Stack (most recent call first):
CMakeLists.txt:9 (include)
-- VIBRANTE_PDK = /home/aj/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/aj/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/aj/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/aj/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/aj/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/aj/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: /usr/local/cuda (found version "10.2")
-- Found PkgConfig: /usr/bin/pkg-config (found version "0.29.1")
-- Found EGL: /home/aj/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/lib-target/libEGL.so
-- Found /home/aj/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/lib-target/libEGL.so:
-- - Includes: [/home/aj/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/include]
-- - Libraries: [/home/aj/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/lib-target/libEGL.so]
-- Found: /home/aj/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/lib-target/libdrm.so
-- Header at: /home/aj/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
CMake Warning at cmake/CommonConfiguration.cmake:79 (message):
Couldn't determine the nvidia driver version: /proc/driver/nvidia/version
was not found. libnvcuvid and nivida-ml might be missing.
Call Stack (most recent call first):
CMakeLists.txt:28 (include)
-- 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/aj/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/lib-target/libX11.so;/home/aj/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/lib-target/libXext.so
-- Looking for XOpenDisplay in /home/aj/nvidia/nvidia_sdk/DRIVE_Software_10.0_Linux_OS_E3550/DRIVEOS/drive-t186ref-linux/lib-target/libX11.so;/home/aj/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
-- Found X11: /home/aj/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: /home/aj/Documents/TV_C2/3rdparty/linux-aarch64/vibrante/lib/libudev.so
-- Found vibrante lib: /home/aj/Documents/TV_C2/3rdparty/linux-aarch64/vibrante/lib/libusb-1.0.so
-- Found vibrante_Xlib: /home/aj/Documents/TV_C2/3rdparty/linux-aarch64/vibrante_Xlibs/lib/libXcursor.so
-- Driveworks Samples install dir: /home/aj/Documents/TV_C2/build_target/install
-- Cross Compiling for Vibrante
-- Driveworks found at: /usr/local/driveworks-2.2/targets/aarch64-Linux
-- Found Driveworks
-- Configuring done
-- Generating done
CMake Warning:
Manually-specified variables were not used by the project:
CMAKE_BUILD
-- Build files have been written to: /home/aj/Documents/TV_C2/build_target
On running make -j && make install:
Scanning dependencies of target update_cuda_deps
Scanning dependencies of target lodepng-src
Scanning dependencies of target glfw-x11
Scanning dependencies of target TV_C2
[ 0%] Built target update_cuda_deps
[ 1%] Building CXX object 3rdparty/src/lodepng/CMakeFiles/lodepng-src.dir/src/lodepng.cpp.o
[ 3%] Building C object src/TV_C2/CMakeFiles/TV_C2.dir/DiagonalizeMatrixC.c.o
[ 4%] Building C object src/TV_C2/CMakeFiles/TV_C2.dir/DiagonalizeMatrix.c.o
[ 6%] Building C object 3rdparty/src/glfw/CMakeFiles/glfw-x11.dir/3.2-screen/src/context.c.o
[ 8%] Building C object 3rdparty/src/glfw/CMakeFiles/glfw-x11.dir/3.2-screen/src/x11_init.c.o
[ 9%] Building C object 3rdparty/src/glfw/CMakeFiles/glfw-x11.dir/3.2-screen/src/posix_tls.c.o
[ 11%] Building C object 3rdparty/src/glfw/CMakeFiles/glfw-x11.dir/3.2-screen/src/init.c.o
[ 13%] Building C object src/TV_C2/CMakeFiles/TV_C2.dir/LinMatrix3d.c.o
[ 14%] Building C object src/TV_C2/CMakeFiles/TV_C2.dir/CalcSlipsFit.c.o
[ 16%] Building C object src/TV_C2/CMakeFiles/TV_C2.dir/VehicleModelDiscreteFit.c.o
[ 29%] Building C object src/TV_C2/CMakeFiles/TV_C2.dir/PredictionMatricesC.c.o
[ 31%] Building C object src/TV_C2/CMakeFiles/TV_C2.dir/deltaSignal.c.o
[ 18%] Building C object src/TV_C2/CMakeFiles/TV_C2.dir/VehicleModelFit.c.o
[ 19%] Building C object 3rdparty/src/glfw/CMakeFiles/glfw-x11.dir/3.2-screen/src/window.c.o
[ 21%] Building C object 3rdparty/src/glfw/CMakeFiles/glfw-x11.dir/3.2-screen/src/linux_joystick.c.o
[ 22%] Building C object src/TV_C2/CMakeFiles/TV_C2.dir/VehicleModelDiscreteFit_terminate.c.o
[ 32%] Building C object src/TV_C2/CMakeFiles/TV_C2.dir/PredictionMatrices.c.o
[ 34%] Building C object src/TV_C2/CMakeFiles/TV_C2.dir/blkdiag.c.o
[ 24%] Building C object src/TV_C2/CMakeFiles/TV_C2.dir/mpc.c.o
[ 39%] Building C object 3rdparty/src/glfw/CMakeFiles/glfw-x11.dir/3.2-screen/src/x11_window.c.o
[ 36%] Building C object 3rdparty/src/glfw/CMakeFiles/glfw-x11.dir/3.2-screen/src/posix_time.c.o
[ 26%] Building C object src/TV_C2/CMakeFiles/TV_C2.dir/QPConstraint_noPow_emxAPI.c.o
[ 27%] Building C object src/TV_C2/CMakeFiles/TV_C2.dir/LinMatrix2d.c.o
[ 68%] Building C object src/TV_C2/CMakeFiles/TV_C2.dir/QPCost_initialize.c.o
[ 68%] Building C object 3rdparty/src/glfw/CMakeFiles/glfw-x11.dir/3.2-screen/src/x11_monitor.c.o
[ 68%] Building C object src/TV_C2/CMakeFiles/TV_C2.dir/obtain_pattern_PA.c.o
[ 68%] Building C object src/TV_C2/CMakeFiles/TV_C2.dir/refGenLUT.c.o
[ 68%] Building C object src/TV_C2/CMakeFiles/TV_C2.dir/eps.c.o
[ 68%] Building C object src/TV_C2/CMakeFiles/TV_C2.dir/VehicleModelDiscreteFit_data.c.o
[ 68%] Building C object src/TV_C2/CMakeFiles/TV_C2.dir/QPCost.c.o
[ 68%] Building C object 3rdparty/src/glfw/CMakeFiles/glfw-x11.dir/3.2-screen/src/xkb_unicode.c.o
[ 39%] Building C object src/TV_C2/CMakeFiles/TV_C2.dir/linG_fit.c.o
[ 68%] Building C object 3rdparty/src/glfw/CMakeFiles/glfw-x11.dir/3.2-screen/src/egl_context.c.o
[ 68%] Building C object src/TV_C2/CMakeFiles/TV_C2.dir/QPConstraint_noPow_terminate.c.o
[ 68%] Building C object 3rdparty/src/glfw/CMakeFiles/glfw-x11.dir/3.2-screen/src/glx_context.c.o
[ 68%] Building C object src/TV_C2/CMakeFiles/TV_C2.dir/eye.c.o
[ 68%] Building C object src/TV_C2/CMakeFiles/TV_C2.dir/ntrp45.c.o
[ 77%] Building C object src/TV_C2/CMakeFiles/TV_C2.dir/c2dTustin.c.o
[ 77%] Building C object src/TV_C2/CMakeFiles/TV_C2.dir/refGenLUT_data.c.o
[ 68%] Building C object src/TV_C2/CMakeFiles/TV_C2.dir/QPConstraint_noPow_emxutil.c.o
[ 68%] Building C object 3rdparty/src/glfw/CMakeFiles/glfw-x11.dir/3.2-screen/src/input.c.o
[ 77%] Building C object 3rdparty/src/glfw/CMakeFiles/glfw-x11.dir/3.2-screen/src/monitor.c.o
[ 77%] Building C object 3rdparty/src/glfw/CMakeFiles/glfw-x11.dir/3.2-screen/src/vulkan.c.o
[ 68%] Building C object src/TV_C2/CMakeFiles/TV_C2.dir/linA_fit.c.o
[ 68%] Building C object src/TV_C2/CMakeFiles/TV_C2.dir/eyeC.c.o
[ 77%] Building C object src/TV_C2/CMakeFiles/TV_C2.dir/linB_fit.c.o
[ 77%] Building C object src/TV_C2/CMakeFiles/TV_C2.dir/rt_nonfinite.c.o
[ 91%] Building C object src/TV_C2/CMakeFiles/TV_C2.dir/QPCost_terminate.c.o
[ 91%] Building C object src/TV_C2/CMakeFiles/TV_C2.dir/QPConstraint_noPow.c.o
[ 91%] Building C object src/TV_C2/CMakeFiles/TV_C2.dir/VehicleModelDiscreteFit_initialize.c.o
[ 91%] Building C object src/TV_C2/CMakeFiles/TV_C2.dir/QPConstraint_noPow_initialize.c.o
[ 91%] Building C object src/TV_C2/CMakeFiles/TV_C2.dir/Ref_GEN.c.o
[ 91%] Building C object src/TV_C2/CMakeFiles/TV_C2.dir/sum.c.o
[ 91%] Building C object src/TV_C2/CMakeFiles/TV_C2.dir/rtGetInf.c.o
[ 91%] Building CXX object src/TV_C2/CMakeFiles/TV_C2.dir/CanManager.cpp.o
[ 95%] Building C object src/TV_C2/CMakeFiles/TV_C2.dir/xgetrf.c.o
[ 91%] Building C object src/TV_C2/CMakeFiles/TV_C2.dir/rtGetNaN.c.o
[ 95%] Building CXX object src/TV_C2/CMakeFiles/TV_C2.dir/main.cpp.o
[ 95%] Built target glfw-x11
Scanning dependencies of target glfw-src
[ 96%] Linking C static library libglfw-src.a
[ 96%] Built target glfw-src
[ 98%] Linking CXX executable TV_C2
/home/aj/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: skipping incompatible /usr/local/driveworks/lib/libdriveworks.so when searching for -ldriveworks
/home/aj/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: cannot find -ldriveworks
/home/aj/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: skipping incompatible /home/aj/Documents/TV_C2/src/TV_C2/libosqp.so when searching for -losqp
/home/aj/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: cannot find -losqp
collect2: error: ld returned 1 exit status
src/TV_C2/CMakeFiles/TV_C2.dir/build.make:1160: recipe for target 'src/TV_C2/TV_C2' failed
make[2]: *** [src/TV_C2/TV_C2] Error 1
CMakeFiles/Makefile2:323: recipe for target 'src/TV_C2/CMakeFiles/TV_C2.dir/all' failed
make[1]: *** [src/TV_C2/CMakeFiles/TV_C2.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
[100%] Linking CXX static library liblodepng-src.a
[100%] Built target lodepng-src
Makefile:129: recipe for target 'all' failed
make: *** [all] Error 2
Kindly advice…