Cross Compiler sees libraries as incompatible (libdriveworks.so ..etc)

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…

Hi ajinkya.krishnakumar,
/usr/local/driveworks/lib/libdriveworks.so is for x86-64. You may need to clarify if something is wrong in the search paths. Thanks!

Where can I find the library that is compatible with aarch64? What would be the correct search path for the driveworks library when cross compiling?

Dear Ajinkya,
You can find driveworks aarch64 libs at /usr/local/driveworks/targets/aarch64-Linux/lib/

Thankyou SivaRamaKrishna and VickNV. I have managed to cross compile successfully.

Good to hear your news!