CMake Linking Issues

Hello,

I am working on an Orin NX 8GB Jetson and I have an issue within CMake getting the cudnn library to link properly. What I do have working so far is an nvcc command in the terminal properly compiling and linking the same main.cu file.

The working nvcc invoked at the command line is:

nvcc main.cu -L.. -L/usr/local/cuda-12.6/lib64 -I/usr/local/cuda-12.6/include/ -I.. -lLoadSafeLandingNetwork -lcudnn -lcublas

This yields the default executable “a.out” and I get the output I expect when I run it.

Now, if I move this into a CMakeLists.txt that should be operating identically (so I think…), I get linking errors on various functions:

  • __sti____cudaRegisterAll()
  • cublasCreate_v2()
  • cudnnDestroy()
  • etc…

The CMakeLists.txt I’ve created to replicate the command line nvcc invoke is:

project ("CMakeCUDA_Test" ) include(CheckLanguage) check_language(CUDA) if(CMAKE_CUDA_COMPILER)     enable_language(CUDA)     if(NOT DEFINED CMAKE_CUDA_ARCHITECTURES)       set(CMAKE_CUDA_ARCHITECTURES 75)     endif()     find_package(CUDAToolkit)     message(STATUS "Enabled CUDA Compiler")     message(STATUS "${CUDAToolkit_BIN_DIR}")     message(STATUS "${CUDAToolkit_INCLUDE_DIRS}")     message(STATUS "${CUDAToolkit_LIBRARY_DIR}") else()     message(STATUS "No CUDA Compiler found") endif()  # Add source to this project's executable. file(GLOB test_SRC "main.cu")  add_executable (cmake_test ${test_SRC})  # Add libraries target_link_directories(cmake_test PUBLIC ".." ${CUDAToolkit_LIBRARY_DIRS}) target_include_directories(cmake_test PUBLIC ".." ${CUDAToolkit_INCLUDE_DIRS}) target_link_libraries(cmake_test -lcudnn -lcublas "libLoadSafeLandingNetwork.a") 

Which yield the output when CMake runs:

jetson@ubuntu:~/Documents/safe_landing/LoadSafeLandingNetwork/examples/build$ cmake ../ -- Enabled CUDA Compiler -- /usr/local/cuda-12.6/bin -- /usr/local/cuda-12.6/targets/aarch64-linux/include -- /usr/local/cuda-12.6/lib64 -- Configuring done (0.1s) -- Generating done (0.0s) -- Build files have been written to: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/build 

And after generating the Makefile and running a simple make command in the CMake build folder I get the following output:

jetson@ubuntu:~/Documents/safe_landing/LoadSafeLandingNetwork/examples/build$ make clean jetson@ubuntu:~/Documents/safe_landing/LoadSafeLandingNetwork/examples/build$ make [ 50%] Building CUDA object CMakeFiles/cmake_test.dir/main.cu.o [100%] Linking CUDA executable cmake_test /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(LoadSafeLandingNetwork_initialize.o): in function `__sti____cudaRegisterAll()': tmpxft_00011a78_00000000-6_LoadSafeLandingNetwork_initialize.cudafe1.cpp:(.text.startup+0x20): undefined reference to `__cudaRegisterLinkedBinary_7a267d6e_36_LoadSafeLandingNetwork_initialize_cu_2898256c' /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(LoadSafeLandingNetwork_terminate.o): in function `__sti____cudaRegisterAll()': tmpxft_00011a95_00000000-6_LoadSafeLandingNetwork_terminate.cudafe1.cpp:(.text.startup+0x20): undefined reference to `__cudaRegisterLinkedBinary_3ae6c24e_35_LoadSafeLandingNetwork_terminate_cu_1fc783d4' /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(LoadSafeLandingNetwork.o): in function `__sti____cudaRegisterAll()': tmpxft_00011a9d_00000000-6_LoadSafeLandingNetwork.cudafe1.cpp:(.text.startup+0x20): undefined reference to `__cudaRegisterLinkedBinary_22b20966_25_LoadSafeLandingNetwork_cu_dedc86e0' /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(DeepLearningNetwork.o): in function `__sti____cudaRegisterAll()': tmpxft_00011aae_00000000-6_DeepLearningNetwork.cudafe1.cpp:(.text.startup+0x20): undefined reference to `__cudaRegisterLinkedBinary_07338302_22_DeepLearningNetwork_cu_3c015049' /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(predict.o): in function `__sti____cudaRegisterAll()': tmpxft_00011ad3_00000000-6_predict.cudafe1.cpp:(.text.startup+0x20): undefined reference to `__cudaRegisterLinkedBinary_75a86cda_10_predict_cu_422f9cd0' /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(LoadSafeLandingNetwork_rtwutil.o): in function `__sti____cudaRegisterAll()': tmpxft_00011ae6_00000000-6_LoadSafeLandingNetwork_rtwutil.cudafe1.cpp:(.text.startup+0x20): undefined reference to `__cudaRegisterLinkedBinary_db4e2d52_33_LoadSafeLandingNetwork_rtwutil_cu_3c1e1de5' /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(MWCudnnTargetNetworkImpl.o): in function `MWCudnnTarget::MWTargetNetworkImpl::preSetup()': tmpxft_00011a16_00000000-6_MWCudnnTargetNetworkImpl.cudafe1.cpp:(.text+0x38): undefined reference to `cublasCreate_v2' /usr/bin/ld: tmpxft_00011a16_00000000-6_MWCudnnTargetNetworkImpl.cudafe1.cpp:(.text+0x58): undefined reference to `cudnnCreate' /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(MWCudnnTargetNetworkImpl.o): in function `MWCudnnTarget::MWTargetNetworkImpl::cleanup()': tmpxft_00011a16_00000000-6_MWCudnnTargetNetworkImpl.cudafe1.cpp:(.text+0x240): undefined reference to `cublasDestroy_v2' /usr/bin/ld: tmpxft_00011a16_00000000-6_MWCudnnTargetNetworkImpl.cudafe1.cpp:(.text+0x268): undefined reference to `cudnnDestroy' /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(MWCudnnTargetNetworkImpl.o): in function `__sti____cudaRegisterAll()': tmpxft_00011a16_00000000-6_MWCudnnTargetNetworkImpl.cudafe1.cpp:(.text.startup+0x20): undefined reference to `__cudaRegisterLinkedBinary_63a1e784_27_MWCudnnTargetNetworkImpl_cu_bac7e8e1' /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(MWCudnnLayerImplFactory.o): in function `__sti____cudaRegisterAll()': tmpxft_00011a20_00000000-6_MWCudnnLayerImplFactory.cudafe1.cpp:(.text.startup+0x20): undefined reference to `__cudaRegisterLinkedBinary_2f799d18_26_MWCudnnLayerImplFactory_cu_66102730' /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(MWCudnnCustomLayerBase.o): in function `MWCudnnCustomLayerBase::reorderOutputData(MWTensorBase*, int)': tmpxft_00011a49_00000000-6_MWCudnnCustomLayerBase.cudafe1.cpp:(.text+0x598): undefined reference to `cudnnTransformTensor' /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(MWCudnnCustomLayerBase.o): in function `MWCudnnCustomLayerBase::reorderInputData(MWTensorBase*, int)': tmpxft_00011a49_00000000-6_MWCudnnCustomLayerBase.cudafe1.cpp:(.text+0x758): undefined reference to `cudnnTransformTensor' /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(MWCudnnCustomLayerBase.o): in function `MWCudnnCustomLayerBase::createInOutDescriptors(MWTensorBase*)': tmpxft_00011a49_00000000-6_MWCudnnCustomLayerBase.cudafe1.cpp:(.text+0x928): undefined reference to `cudnnCreateTensorDescriptor' /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(MWCudnnCustomLayerBase.o): in function `MWCudnnCustomLayerBase::createInOutTransformDescriptors(MWTensorBase*)': tmpxft_00011a49_00000000-6_MWCudnnCustomLayerBase.cudafe1.cpp:(.text+0xaf8): undefined reference to `cudnnCreateTensorDescriptor' /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(MWCudnnCustomLayerBase.o): in function `MWCudnnCustomLayerBase::setupInputDescriptors(MWTensorBase*, MWTensorBase::DIMSLABEL*, MWTensorBase::DIMSLABEL*)': tmpxft_00011a49_00000000-6_MWCudnnCustomLayerBase.cudafe1.cpp:(.text+0xc78): undefined reference to `cudnnSetTensorNdDescriptor' /usr/bin/ld: tmpxft_00011a49_00000000-6_MWCudnnCustomLayerBase.cudafe1.cpp:(.text+0xd20): undefined reference to `cudnnSetTensorNdDescriptor' /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(MWCudnnCustomLayerBase.o): in function `MWCudnnCustomLayerBase::setupOutputDescriptors(MWTensorBase*, MWTensorBase::DIMSLABEL*, MWTensorBase::DIMSLABEL*)': tmpxft_00011a49_00000000-6_MWCudnnCustomLayerBase.cudafe1.cpp:(.text+0xea0): undefined reference to `cudnnSetTensorNdDescriptor' /usr/bin/ld: tmpxft_00011a49_00000000-6_MWCudnnCustomLayerBase.cudafe1.cpp:(.text+0xf48): undefined reference to `cudnnSetTensorNdDescriptor' /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(MWCudnnCustomLayerBase.o): in function `MWCudnnCustomLayerBase::cleanup()': tmpxft_00011a49_00000000-6_MWCudnnCustomLayerBase.cudafe1.cpp:(.text+0x1028): undefined reference to `cudnnDestroyTensorDescriptor' /usr/bin/ld: tmpxft_00011a49_00000000-6_MWCudnnCustomLayerBase.cudafe1.cpp:(.text+0x1080): undefined reference to `cudnnDestroyTensorDescriptor' /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(MWCudnnCustomLayerBase.o): in function `__sti____cudaRegisterAll()': tmpxft_00011a49_00000000-6_MWCudnnCustomLayerBase.cudafe1.cpp:(.text.startup+0x20): undefined reference to `__cudaRegisterLinkedBinary_ced4207d_25_MWCudnnCustomLayerBase_cu_85d82daf' /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(LoadSafeLandingNetwork_data.o): in function `__sti____cudaRegisterAll()': tmpxft_00011a6e_00000000-6_LoadSafeLandingNetwork_data.cudafe1.cpp:(.text.startup+0x20): undefined reference to `__cudaRegisterLinkedBinary_228eb97d_30_LoadSafeLandingNetwork_data_cu_ce61d6df' /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(MWCudnnAdditionLayerImpl.o): in function `MWCudnnTarget::MWAdditionLayerImpl::predict()': tmpxft_00011920_00000000-6_MWCudnnAdditionLayerImpl.cudafe1.cpp:(.text+0x15c): undefined reference to `cudnnAddTensor' /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(MWCudnnAdditionLayerImpl.o): in function `__sti____cudaRegisterAll()': tmpxft_00011920_00000000-6_MWCudnnAdditionLayerImpl.cudafe1.cpp:(.text.startup+0x20): undefined reference to `__cudaRegisterLinkedBinary_659ed72b_27_MWCudnnAdditionLayerImpl_cu_59f5bbb7' /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(MWCudnnAvgPoolingLayerImpl.o): in function `MWCudnnTarget::MWAvgPoolingLayerImpl::predict()': tmpxft_00011928_00000000-6_MWCudnnAvgPoolingLayerImpl.cudafe1.cpp:(.text+0x34c): undefined reference to `cudnnPoolingForward' /usr/bin/ld: tmpxft_00011928_00000000-6_MWCudnnAvgPoolingLayerImpl.cudafe1.cpp:(.text+0x3d4): undefined reference to `cudnnPoolingForward' /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(MWCudnnAvgPoolingLayerImpl.o): in function `MWCudnnTarget::MWAvgPoolingLayerImpl::cleanup()': tmpxft_00011928_00000000-6_MWCudnnAvgPoolingLayerImpl.cudafe1.cpp:(.text+0x480): undefined reference to `cudnnDestroyPoolingDescriptor' /usr/bin/ld: tmpxft_00011928_00000000-6_MWCudnnAvgPoolingLayerImpl.cudafe1.cpp:(.text+0x4b4): undefined reference to `cudnnDestroyTensorDescriptor' /usr/bin/ld: tmpxft_00011928_00000000-6_MWCudnnAvgPoolingLayerImpl.cudafe1.cpp:(.text+0x508): undefined reference to `cudnnDestroyTensorDescriptor' /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(MWCudnnAvgPoolingLayerImpl.o): in function `MWCudnnTarget::MWAvgPoolingLayerImpl::propagateSize()': tmpxft_00011928_00000000-6_MWCudnnAvgPoolingLayerImpl.cudafe1.cpp:(.text+0x600): undefined reference to `cudnnSetPooling2dDescriptor' /usr/bin/ld: tmpxft_00011928_00000000-6_MWCudnnAvgPoolingLayerImpl.cudafe1.cpp:(.text+0x688): undefined reference to `cudnnSetTensor4dDescriptor' /usr/bin/ld: tmpxft_00011928_00000000-6_MWCudnnAvgPoolingLayerImpl.cudafe1.cpp:(.text+0x6f8): undefined reference to `cudnnSetTensor4dDescriptor' /usr/bin/ld: tmpxft_00011928_00000000-6_MWCudnnAvgPoolingLayerImpl.cudafe1.cpp:(.text+0x73c): undefined reference to `cudnnSetTensor4dDescriptor' /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(MWCudnnAvgPoolingLayerImpl.o): in function `MWCudnnTarget::MWAvgPoolingLayerImpl::MWAvgPoolingLayerImpl(MWCNNLayer*, MWCudnnTarget::MWTargetNetworkImpl*, int, int, int, int, int, int, int, int, bool)': tmpxft_00011928_00000000-6_MWCudnnAvgPoolingLayerImpl.cudafe1.cpp:(.text+0x8f0): undefined reference to `cudnnCreatePoolingDescriptor' /usr/bin/ld: tmpxft_00011928_00000000-6_MWCudnnAvgPoolingLayerImpl.cudafe1.cpp:(.text+0xa1c): undefined reference to `cudnnCreateTensorDescriptor' /usr/bin/ld: tmpxft_00011928_00000000-6_MWCudnnAvgPoolingLayerImpl.cudafe1.cpp:(.text+0xacc): undefined reference to `cudnnCreateTensorDescriptor' /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(MWCudnnAvgPoolingLayerImpl.o): in function `__sti____cudaRegisterAll()': tmpxft_00011928_00000000-6_MWCudnnAvgPoolingLayerImpl.cudafe1.cpp:(.text.startup+0x20): undefined reference to `__cudaRegisterLinkedBinary_ac28b6d6_29_MWCudnnAvgPoolingLayerImpl_cu_9f1d5bd9' /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(MWCudnnBatchNormalizationLayerImpl.o): in function `MWCudnnTarget::MWBatchNormalizationLayerImpl::propagateSize()': tmpxft_00011930_00000000-6_MWCudnnBatchNormalizationLayerImpl.cudafe1.cpp:(.text+0xb4): undefined reference to `cudnnDeriveBNTensorDescriptor' /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(MWCudnnBatchNormalizationLayerImpl.o): in function `MWCudnnTarget::MWBatchNormalizationLayerImpl::predict()': tmpxft_00011930_00000000-6_MWCudnnBatchNormalizationLayerImpl.cudafe1.cpp:(.text+0x284): undefined reference to `cudnnBatchNormalizationForwardInference' /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(MWCudnnBatchNormalizationLayerImpl.o): in function `MWCudnnTarget::MWBatchNormalizationLayerImpl::cleanup()': tmpxft_00011930_00000000-6_MWCudnnBatchNormalizationLayerImpl.cudafe1.cpp:(.text+0x2f0): undefined reference to `cudnnDestroyTensorDescriptor' /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(MWCudnnBatchNormalizationLayerImpl.o): in function `MWCudnnTarget::MWBatchNormalizationLayerImpl::MWBatchNormalizationLayerImpl(MWCNNLayer*, MWCudnnTarget::MWTargetNetworkImpl*, float, char const*, char const*, char const*, char const*, int)': tmpxft_00011930_00000000-6_MWCudnnBatchNormalizationLayerImpl.cudafe1.cpp:(.text+0x4bc): undefined reference to `cudnnCreateTensorDescriptor' /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(MWCudnnBatchNormalizationLayerImpl.o): in function `__sti____cudaRegisterAll()': tmpxft_00011930_00000000-6_MWCudnnBatchNormalizationLayerImpl.cudafe1.cpp:(.text.startup+0x20): undefined reference to `__cudaRegisterLinkedBinary_8d4eff57_37_MWCudnnBatchNormalizationLayerImpl_cu_a6a3321e' /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(MWCudnnConcatenationLayerImpl.o): in function `__sti____cudaRegisterAll()': tmpxft_0001193a_00000000-6_MWCudnnConcatenationLayerImpl.cudafe1.cpp:(.text.startup+0x20): undefined reference to `__cudaRegisterLinkedBinary_21b0a3b6_32_MWCudnnConcatenationLayerImpl_cu_a480e046' /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(MWCudnnConvLayerImpl.o): in function `MWCudnnTarget::MWConvLayerImpl::propagateSize()': tmpxft_0001197a_00000000-6_MWCudnnConvLayerImpl.cudafe1.cpp:(.text+0xa4): undefined reference to `cudnnSetTensor4dDescriptor' /usr/bin/ld: tmpxft_0001197a_00000000-6_MWCudnnConvLayerImpl.cudafe1.cpp:(.text+0x148): undefined reference to `cudnnGetConvolutionForwardAlgorithm_v7' /usr/bin/ld: tmpxft_0001197a_00000000-6_MWCudnnConvLayerImpl.cudafe1.cpp:(.text+0x188): undefined reference to `cudnnGetConvolutionForwardWorkspaceSize' /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(MWCudnnConvLayerImpl.o): in function `MWCudnnTarget::MWConvLayerImpl::predict()': tmpxft_0001197a_00000000-6_MWCudnnConvLayerImpl.cudafe1.cpp:(.text+0x4d0): undefined reference to `cudnnConvolutionForward' /usr/bin/ld: tmpxft_0001197a_00000000-6_MWCudnnConvLayerImpl.cudafe1.cpp:(.text+0x528): undefined reference to `cudnnAddTensor' /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(MWCudnnConvLayerImpl.o): in function `MWCudnnTarget::MWConvLayerImpl::cleanup()': tmpxft_0001197a_00000000-6_MWCudnnConvLayerImpl.cudafe1.cpp:(.text+0x714): undefined reference to `cudnnDestroyConvolutionDescriptor' /usr/bin/ld: tmpxft_0001197a_00000000-6_MWCudnnConvLayerImpl.cudafe1.cpp:(.text+0x728): undefined reference to `cudnnDestroyFilterDescriptor' /usr/bin/ld: tmpxft_0001197a_00000000-6_MWCudnnConvLayerImpl.cudafe1.cpp:(.text+0x758): undefined reference to `cudnnDestroyTensorDescriptor' /usr/bin/ld: tmpxft_0001197a_00000000-6_MWCudnnConvLayerImpl.cudafe1.cpp:(.text+0x7a4): undefined reference to `cudnnDestroyTensorDescriptor' /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(MWCudnnConvLayerImpl.o): in function `MWCudnnTarget::MWConvLayerImpl::getConvAlgoTuned()': tmpxft_0001197a_00000000-6_MWCudnnConvLayerImpl.cudafe1.cpp:(.text+0x8f8): undefined reference to `cudnnFindConvolutionForwardAlgorithmEx' /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(MWCudnnConvLayerImpl.o): in function `MWCudnnTarget::MWConvLayerImpl::getConvAlgoWorkSpaceLimit()': tmpxft_0001197a_00000000-6_MWCudnnConvLayerImpl.cudafe1.cpp:(.text+0x9e8): undefined reference to `cudnnGetConvolutionForwardAlgorithmMaxCount' /usr/bin/ld: tmpxft_0001197a_00000000-6_MWCudnnConvLayerImpl.cudafe1.cpp:(.text+0xa6c): undefined reference to `cudnnGetConvolutionForwardAlgorithm_v7' /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(MWCudnnConvLayerImpl.o): in function `MWCudnnTarget::MWConvLayerImpl::MWConvLayerImpl(MWCNNLayer*, MWCudnnTarget::MWTargetNetworkImpl*, int, int, int, int, int, int, int, int, int, int, int, int, int, char const*, char const*)': tmpxft_0001197a_00000000-6_MWCudnnConvLayerImpl.cudafe1.cpp:(.text+0x10e8): undefined reference to `cudnnCreateConvolutionDescriptor' /usr/bin/ld: tmpxft_0001197a_00000000-6_MWCudnnConvLayerImpl.cudafe1.cpp:(.text+0x1100): undefined reference to `cudnnCreateFilterDescriptor' /usr/bin/ld: tmpxft_0001197a_00000000-6_MWCudnnConvLayerImpl.cudafe1.cpp:(.text+0x1114): undefined reference to `cudnnCreateTensorDescriptor' /usr/bin/ld: tmpxft_0001197a_00000000-6_MWCudnnConvLayerImpl.cudafe1.cpp:(.text+0x1168): undefined reference to `cudnnSetConvolution2dDescriptor' /usr/bin/ld: tmpxft_0001197a_00000000-6_MWCudnnConvLayerImpl.cudafe1.cpp:(.text+0x118c): undefined reference to `cudnnSetConvolutionGroupCount' /usr/bin/ld: tmpxft_0001197a_00000000-6_MWCudnnConvLayerImpl.cudafe1.cpp:(.text+0x11bc): undefined reference to `cudnnSetFilter4dDescriptor' /usr/bin/ld: tmpxft_0001197a_00000000-6_MWCudnnConvLayerImpl.cudafe1.cpp:(.text+0x11e8): undefined reference to `cudnnSetTensor4dDescriptor' /usr/bin/ld: tmpxft_0001197a_00000000-6_MWCudnnConvLayerImpl.cudafe1.cpp:(.text+0x1398): undefined reference to `cudnnCreateTensorDescriptor' /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(MWCudnnConvLayerImpl.o): in function `__sti____cudaRegisterAll()': tmpxft_0001197a_00000000-6_MWCudnnConvLayerImpl.cudafe1.cpp:(.text.startup+0x20): undefined reference to `__cudaRegisterLinkedBinary_15cf97f9_23_MWCudnnConvLayerImpl_cu_f4cb2b67' /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(MWCudnnElementwiseAffineLayerImpl.o): in function `__sti____cudaRegisterAll()': tmpxft_0001197f_00000000-6_MWCudnnElementwiseAffineLayerImpl.cudafe1.cpp:(.text.startup+0x20): undefined reference to `__cudaRegisterLinkedBinary_a891a31e_36_MWCudnnElementwiseAffineLayerImpl_cu_be5fe03d' /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(MWCudnnLeakyReLULayerImpl.o): in function `__sti____cudaRegisterAll()': tmpxft_0001198a_00000000-6_MWCudnnLeakyReLULayerImpl.cudafe1.cpp:(.text.startup+0x20): undefined reference to `__cudaRegisterLinkedBinary_a2e44d4e_28_MWCudnnLeakyReLULayerImpl_cu_aef10433' /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(MWCudnnOutputLayerImpl.o): in function `__sti____cudaRegisterAll()': tmpxft_00011996_00000000-6_MWCudnnOutputLayerImpl.cudafe1.cpp:(.text.startup+0x20): undefined reference to `__cudaRegisterLinkedBinary_6dd22f7f_25_MWCudnnOutputLayerImpl_cu_b6bf9137' /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(MWCudnnSoftmaxLayerImpl.o): in function `MWCudnnTarget::MWSoftmaxLayerImpl::propagateSize()': tmpxft_000119d2_00000000-6_MWCudnnSoftmaxLayerImpl.cudafe1.cpp:(.text+0xb0): undefined reference to `cudnnSetTensor4dDescriptor' /usr/bin/ld: tmpxft_000119d2_00000000-6_MWCudnnSoftmaxLayerImpl.cudafe1.cpp:(.text+0xdc): undefined reference to `cudnnSetTensor4dDescriptor' /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(MWCudnnSoftmaxLayerImpl.o): in function `MWCudnnTarget::MWSoftmaxLayerImpl::predict()': tmpxft_000119d2_00000000-6_MWCudnnSoftmaxLayerImpl.cudafe1.cpp:(.text+0x194): undefined reference to `cudnnSoftmaxForward' /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(MWCudnnSoftmaxLayerImpl.o): in function `MWCudnnTarget::MWSoftmaxLayerImpl::cleanup()': tmpxft_000119d2_00000000-6_MWCudnnSoftmaxLayerImpl.cudafe1.cpp:(.text+0x1dc): undefined reference to `cudnnDestroyTensorDescriptor' /usr/bin/ld: tmpxft_000119d2_00000000-6_MWCudnnSoftmaxLayerImpl.cudafe1.cpp:(.text+0x1f0): undefined reference to `cudnnDestroyTensorDescriptor' /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(MWCudnnSoftmaxLayerImpl.o): in function `MWCudnnTarget::MWSoftmaxLayerImpl::MWSoftmaxLayerImpl(MWCNNLayer*, MWCudnnTarget::MWTargetNetworkImpl*)': tmpxft_000119d2_00000000-6_MWCudnnSoftmaxLayerImpl.cudafe1.cpp:(.text+0x234): undefined reference to `cudnnCreateTensorDescriptor' /usr/bin/ld: tmpxft_000119d2_00000000-6_MWCudnnSoftmaxLayerImpl.cudafe1.cpp:(.text+0x24c): undefined reference to `cudnnCreateTensorDescriptor' /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(MWCudnnSoftmaxLayerImpl.o): in function `__sti____cudaRegisterAll()': tmpxft_000119d2_00000000-6_MWCudnnSoftmaxLayerImpl.cudafe1.cpp:(.text.startup+0x20): undefined reference to `__cudaRegisterLinkedBinary_8f2316dd_26_MWCudnnSoftmaxLayerImpl_cu_9b3f4490' /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(MWElementwiseAffineLayerImplKernel.o): in function `__sti____cudaRegisterAll()': tmpxft_000119da_00000000-6_MWElementwiseAffineLayerImplKernel.cudafe1.cpp:(.text.startup+0x20): undefined reference to `__cudaRegisterLinkedBinary_aeabb3d2_37_MWElementwiseAffineLayerImplKernel_cu_adec7dc0' /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(MWLeakyReLULayerImplKernel.o): in function `__sti____cudaRegisterAll()': tmpxft_000119e4_00000000-6_MWLeakyReLULayerImplKernel.cudafe1.cpp:(.text.startup+0x20): undefined reference to `__cudaRegisterLinkedBinary_dee47261_29_MWLeakyReLULayerImplKernel_cu_878a4b6d' /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(MWCudnnCNNLayerImpl.o): in function `MWCudnnTarget::cudnn_call_line_file(cudnnStatus_t, int, char const*)': tmpxft_000119ee_00000000-6_MWCudnnCNNLayerImpl.cudafe1.cpp:(.text+0xf28): undefined reference to `cudnnGetErrorString' /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(MWCudnnCNNLayerImpl.o): in function `MWCudnnTarget::MWCNNLayerImpl::setDescriptorForINT8(cudnnTensorStruct*&, MWTensor<signed char>*, cudnnDataType_t, cudnnTensorFormat_t)': tmpxft_000119ee_00000000-6_MWCudnnCNNLayerImpl.cudafe1.cpp:(.text+0x10ec): undefined reference to `cudnnSetTensor4dDescriptor' /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(MWCudnnCNNLayerImpl.o): in function `MWCudnnTarget::MWCNNLayerImpl::~MWCNNLayerImpl()': tmpxft_000119ee_00000000-6_MWCudnnCNNLayerImpl.cudafe1.cpp:(.text+0x1148): undefined reference to `cudnnDestroyTensorDescriptor' /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(MWCudnnCNNLayerImpl.o): in function `MWCudnnTarget::MWCNNLayerImpl::createAndAddDescriptor(int)': tmpxft_000119ee_00000000-6_MWCudnnCNNLayerImpl.cudafe1.cpp:(.text+0x176c): undefined reference to `cudnnCreateTensorDescriptor' /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(MWCudnnCNNLayerImpl.o): in function `MWCudnnTarget::MWCNNLayerImpl::getCuDNNDescriptor(MWTensorBase*)': tmpxft_000119ee_00000000-6_MWCudnnCNNLayerImpl.cudafe1.cpp:(.text+0x18cc): undefined reference to `cudnnCreateTensorDescriptor' /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(MWCudnnCNNLayerImpl.o): in function `__sti____cudaRegisterAll()': tmpxft_000119ee_00000000-6_MWCudnnCNNLayerImpl.cudafe1.cpp:(.text.startup+0x20): undefined reference to `__cudaRegisterLinkedBinary_34db9680_22_MWCudnnCNNLayerImpl_cu_40407de2' /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(MWCudnnCNNLayerImpl.o): in function `void MWCudnnTarget::MWCNNLayerImpl::setDescriptor<float>(cudnnTensorStruct*&, MWTensor<float>*)': tmpxft_000119ee_00000000-6_MWCudnnCNNLayerImpl.cudafe1.cpp:(.text._ZN13MWCudnnTarget14MWCNNLayerImpl13setDescriptorIfEEvRP17cudnnTensorStructP8MWTensorIT_E[_ZN13MWCudnnTarget14MWCNNLayerImpl13setDescriptorIfEEvRP17cudnnTensorStructP8MWTensorIT_E]+0x78): undefined reference to `cudnnSetTensorNdDescriptor' /usr/bin/ld: tmpxft_000119ee_00000000-6_MWCudnnCNNLayerImpl.cudafe1.cpp:(.text._ZN13MWCudnnTarget14MWCNNLayerImpl13setDescriptorIfEEvRP17cudnnTensorStructP8MWTensorIT_E[_ZN13MWCudnnTarget14MWCNNLayerImpl13setDescriptorIfEEvRP17cudnnTensorStructP8MWTensorIT_E]+0xc8): undefined reference to `cudnnSetTensor4dDescriptor' /usr/bin/ld: /home/jetson/Documents/safe_landing/LoadSafeLandingNetwork/examples/../libLoadSafeLandingNetwork.a(MWCudnnCNNLayerImpl.o): in function `void MWCudnnTarget::MWCNNLayerImpl::setDescriptor<signed char>(cudnnTensorStruct*&, MWTensor<signed char>*)': tmpxft_000119ee_00000000-6_MWCudnnCNNLayerImpl.cudafe1.cpp:(.text._ZN13MWCudnnTarget14MWCNNLayerImpl13setDescriptorIaEEvRP17cudnnTensorStructP8MWTensorIT_E[_ZN13MWCudnnTarget14MWCNNLayerImpl13setDescriptorIaEEvRP17cudnnTensorStructP8MWTensorIT_E]+0x78): undefined reference to `cudnnSetTensorNdDescriptor' /usr/bin/ld: tmpxft_000119ee_00000000-6_MWCudnnCNNLayerImpl.cudafe1.cpp:(.text._ZN13MWCudnnTarget14MWCNNLayerImpl13setDescriptorIaEEvRP17cudnnTensorStructP8MWTensorIT_E[_ZN13MWCudnnTarget14MWCNNLayerImpl13setDescriptorIaEEvRP17cudnnTensorStructP8MWTensorIT_E]+0xc8): undefined reference to `cudnnSetTensor4dDescriptor' collect2: error: ld returned 1 exit status make[2]: *** [CMakeFiles/cmake_test.dir/build.make:103: cmake_test] Error 1 make[1]: *** [CMakeFiles/Makefile2:87: CMakeFiles/cmake_test.dir/all] Error 2 make: *** [Makefile:91: all] Error 2 

I’ve double checked the include and library directories and see that the CMake output matches the command line invoked -L and -I flags. So it seems like the libraries should be found and now there is something else keeping them from linking? Am I missing something that needs to be done higher up in my CMakeLists.txt to prepare the linker?

Any help is greatly appreciated. Thank you.