Hello,
I am trying to compile a project with cuda. The cuda part of the code compiles correctly, but there is an error in the linking phase.
nvlink fatal : elfLink linker library load error
-
- Verified that
nvccworks by compiling a simple CUDA program (Hello, CUDA!).
- Verified that
- Checked that the required libraries (
librt.a,libdl.a,libpthread.a) exist in/usr/lib/x86_64-linux-gnu/. - Cleared the CMake cache and re-ran the configuration.
Despite these steps, the linking phase still fails. Could this be due to an issue with library compatibility, or is there something missing in my CMakeLists.txt?
Thank you in advance!
Best regards,
Rafael Scatena
* CUDA Version: 12.0.140
* Driver Version: 550.120
* GPU: NVIDIA RTX 5000 Ada
* CMake Version: 3.28.3
* GCC Version 12.3.0
* OS: Ubuntu 22.04
Error:
[ 90%] Linking CUDA device code CMakeFiles/PRISMAMESH.dir/cmake_device_link.o
/usr/bin/cmake -E cmake_link_script CMakeFiles/PRISMAMESH.dir/dlink.txt --verbose=1
/usr/bin/nvcc -forward-unknown-to-host-compiler -arch=native -dlto -Xcompiler=-fPIC -Wno-deprecated-gpu-targets -shared -dlink --options-file CMakeFiles/PRISMAMESH.dir/deviceObjects1.rsp -o CMakeFiles/PRISMAMESH.dir/cmake_device_link.o --options-file CMakeFiles/PRISMAMESH.dir/deviceLinkLibs.rsp
nvlink warning : Skipping incompatible '/usr/lib/x86_64-linux-gnu/librt.a' when searching for -lrt
nvlink warning : Skipping incompatible '/usr/lib/x86_64-linux-gnu/libdl.a' when searching for -ldl
nvlink warning : Skipping incompatible '/usr/lib/x86_64-linux-gnu/libpthread.a' when searching for -lpthread
nvlink fatal : elfLink linker library load error
make[2]: *** [CMakeFiles/PRISMAMESH.dir/build.make:490: CMakeFiles/PRISMAMESH.dir/cmake_device_link.o] Erro 1
make[2]: Saindo do diretório '/home/3484681/Área de trabalho/PRISMAMESH/CUDAOCTREE/PRISMAMESH3'
make[1]: *** [CMakeFiles/Makefile2:86: CMakeFiles/PRISMAMESH.dir/all] Erro 2
make[1]: Saindo do diretório '/home/3484681/Área de trabalho/PRISMAMESH/CUDAOCTREE/PRISMAMESH3'
make: *** [Makefile:94: all] Erro 2
CmakeLists file:
####################### CMAKE CONFIG
set(CUDA_USE_STATIC_CUDA_RUNTIME ON)
cmake_minimum_required(VERSION 3.12 FATAL_ERROR)
set(CMAKE_CUDA_ARCHITECTURES "native")
project(PRISMAMESH LANGUAGES CXX CUDA)
project(PRISMAMESH)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_ENTENSIONS OFF)
set(CMAKE_CXX_FLAGS "")
set(CMAKE_CUDA_FLAGS "")
set(CMAKE_CUDA_COMPILER_LAUNCHER "")
set(CMAKE_VERBOSE_MAKEFILE ON)
set(CMAKE_C_COMPILER /usr/bin/gcc)
set(CMAKE_CXX_COMPILER /usr/bin/g++)
# Suppress warnings for GCC and Clang
if (CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
add_compile_options(-w)
endif()
####################### APPEND PATH TO CMAKE LIBRARIES
list(APPEND CMAKE_PREFIX_PATH
#USR
"/usr/lib" "/usr/lib32" "/usr/lib64"
"/usr/include" "/usr/lib64"
# OPENMPI
"/usr/lib/x86_64-linux-gnu/openmpi/"
"/usr/lib/x86_64-linux-gnu/openmpi/include"
"/usr/lib/x86_64-linux-gnu/openmpi/lib"
"/usr/lib/x86_64-linux-gnu/openmpi/include/openmpi"
"/usr/lib/x86_64-linux-gnu/openmpi/lib"
# MPICXX
"/usr/bin/mpicxx" "/usr/bin/mpicc" "/usr/lib/x86_64-linux-gnu/mpich/include"
# OpenGL
"/usr/include/GL/"
# Boost
"/home/3484681/support/boost/boost_1_87_0/libs"
"/home/3484681/support/boost/boost_1_87_0"
# CUDA
"/usr/local/cuda-12.5/targets/x86_64-linux/lib"
"/usr/lib/cuda/include"
"/usr/local/cuda-12.5/include"
"/usr/local/cuda-12.5/bin" "/usr/local/cuda-12.5"
"/usr/lib/x86_64-linux-gnu/"
)
####################### CUDA
# Find CUDA
find_package(CUDAToolkit REQUIRED)
if(CUDAToolkit_FOUND)
message(STATUS "CUDA Toolkit found!")
message(STATUS "CUDA Version: ${CUDAToolkit_VERSION}")
else()
message(FATAL_ERROR "CUDA Toolkit not found.")
endif()
set(CUDA_PROPAGATE_HOST_FLAGS OFF)
set(CUDA_64_BIT_DEVICE_CODE ON)
set(CUDA_NVCC_FLAGS dc -dlto)
# Check if CUDA is found and print its version
if(CUDAToolkit_FOUND)
message(STATUS "CUDA Toolkit found!")
message(STATUS "CUDA Version: ${CUDAToolkit_VERSION}")
else()
message(FATAL_ERROR "CUDA Toolkit not found.")
endif()
enable_language(CUDA)
set(CUDA_HOST_COMPILATION_CPP ON)
####################### ADD EXECUTABLE
set(CUDA_SOURCES
PRISMAMESH.cxx
CudaOctreeAux.cu
)
add_executable(PRISMAMESH PRISMAMESH.cxx ${CUDA_SOURCES})
target_compile_options(PRISMAMESH PRIVATE
#$<$<COMPILE_LANGUAGE:CUDA>:-Xcompiler=-fPIC>
#$<$<COMPILE_LANGUAGE:CUDA>:-rdc=true>
$<$<COMPILE_LANGUAGE:CUDA>:-m64>
)
set_target_properties(PRISMAMESH PROPERTIES
CUDA_SEPARABLE_COMPILATION ON
CUDA_RESOLVE_DEVICE_SYMBOLS ON
INTERPROCEDURAL_OPTIMIZATION TRUE
)
target_include_directories(PRISMAMESH PRIVATE ${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/include ${Boost_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include ${CMAKE_CURRENT_BINARY_DIR} ${CUDAToolkit_INCLUDE_DIR}
)
target_link_libraries(PRISMAMESH PRIVATE ${CUDAToolkit_LIBRARIES})
set(CMAKE_DISABLE_PRECOMPILE_HEADERS TRUE)