Я хочу добавить вызовы библиотеки мониторинга NVidia в свое приложение CUDA. Однако библиотека nvidia-ml
не является частью CUDA; это часть драйвера устройства. Тем не менее, CUDA предоставляет для этого заглушки. Похоже, это сбивает CMake с толку. Я ищу способ распаковать CMake.
По совету моего гуру я создал FindNvidiaML.cmake
файл
# set the base location
set(NVIDIA_ML_PATHS
/usr/lib64
/usr/lib64/nvidia
)
# Look for the library
find_library( NVIDIA_ML_LIBRARY
NAMES
nvidia-ml
HINTS
${NVIDIA_ML_PATHS}
)
# Make sure valid
if( NVIDIA_ML_LIBRARY )
SET( NVIDIA_ML_FOUND TRUE )
endif()
(NVIDIA_ML_LIBRARY
имеет значение /usr/lib64/libnvidia-ml.so
)
В моем основном файле CMakeLists.txt есть эта часть
find_package(NvidiaML REQUIRED)
Указанный здесь c продукт, проиллюстрированный здесь файл CMakeLists.txt, выглядит так:
set(myTarget DspTests)
add_executable( ${myTarget}
Global_unittest.cpp
nvSMI_unittest.cpp
BlackmanHarris_unittest.cpp
BlackmanHarrisCU_unittest.cu
FFT_unittest.cu
FindPeakKernel_unittest.cu
)
target_include_directories( ${myTarget} SYSTEM PRIVATE
${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES}
)
set_target_properties( ${myTarget} PROPERTIES
CUDA_SEPARABLE_COMPILATION ON
POSITION_INDEPENDENT_CODE ON
)
target_link_libraries( ${myTarget}
dsp cufft ${NVIDIA_ML_LIBRARY}
gtest gtestApp
)
add_gtest( ${myTarget} )
Вывод CMake:
CMake Warning at dsp/unit/CMakeLists.txt:13 (add_executable):
Cannot generate a safe linker search path for target DspTests because files
in some directories may conflict with libraries in implicit directories:
link library [libnvidia-ml.so] in /usr/lib64 may be hidden by files in:
/usr/local/cuda/targets/x86_64-linux/lib/stubs
Some of these libraries may not be found correctly.
Поиск, я нахожу
$ find /usr/ -name 'libnvidia-ml*' -ls 2>/dev/null
51097542 1512 -rwxr-xr-x 1 root root 1545404 Jun 11 2019 /usr/lib/libnvidia-ml.so.418.67
51102213 0 lrwxrwxrwx 1 root root 22 Jun 11 2019 /usr/lib/libnvidia-ml.so.1 -> libnvidia-ml.so.418.67
51102218 0 lrwxrwxrwx 1 root root 17 Jun 11 2019 /usr/lib/libnvidia-ml.so -> libnvidia-ml.so.1
34907591 1536 -rwxr-xr-x 1 root root 1569688 Apr 6 2019 /usr/lib64/libnvidia-ml.so.418.67
34907590 0 lrwxrwxrwx 1 root root 22 Jun 11 2019 /usr/lib64/libnvidia-ml.so.1 -> libnvidia-ml.so.418.67
34972797 0 lrwxrwxrwx 1 root root 22 Jun 11 2019 /usr/lib64/libnvidia-ml.so -> libnvidia-ml.so.418.67
17152088 32 -rwxr-xr-x 1 root root 31808 Apr 24 2019 /usr/local/cuda-10.1/targets/x86_64-linux/lib/stubs/libnvidia-ml.so
Это не дубликат CMake не может создать безопасный путь поиска компоновщика - yocto 2.4 или Предупреждение CMake. Невозможно создать безопасный путь поиска компоновщика для целевого объекта , хотя симптомы аналогичны. Возможно, это дубликат CMAKE - скрытых файлов библиотеки времени выполнения
Несмотря на предупреждение, код правильно связывается с библиотекой в / usr / lib64 и запускается. Таким образом, здесь нет ошибки. Однако такое подробное предупреждение в выводе, безусловно, создает иллюзию ошибки. Учитывая путь установки драйвера NVidia и пути поиска, необходимые для построения CUDA, и фактические дублирующиеся библиотеки, условие кажется неизбежным.
Вопрос в том, как отключить это предупреждение?
Окружающая среда:
CentOS 7,3 г cc 7,3 CUDA 10.1 CMake 3.13.5