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
nvcc
works 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)