You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ArrayFire CPP搭配CUDA报错:无法打开libnvrtc-builtins.so.12.2

问题

在CMake构建依赖ArrayFire的C项目时,ArrayFire无法调用NVIDIA GPU。已安装CUDA Toolkit并遵循ArrayFire官方Linux安装步骤,但运行Google C测试时出现以下错误:

In function compileModule
In file src/backend/cuda/compile_module.cpp:297
NVRTC Error(7): NVRTC_ERROR_BUILTIN_OPERATION_FAILURE
Log: 
nvrtc: error: failed to open libnvrtc-builtins.so.12.2.
  Make sure that libnvrtc-builtins.so.12.2 is installed correctly.

CMake配置如下:

cmake_minimum_required(VERSION 3.27)
project(...)

set(CMAKE_CXX_STANDARD 17)

set(CUDA_TOOLKIT_ROOT_DIR "/usr/local/cuda-11.3")
find_package(CUDAToolkit 11.3 REQUIRED)

include_directories(
        ${PROJECT_SOURCE_DIR}/lib/eigen-3.4.0
        ${CUDA_TOOLKIT_ROOT_DIR}/include
        ${ArrayFire_INCLUDE_DIRS}
        ${gtest_SOURCE_DIR}/include ${gtest_SOURCE_DIR}
)

link_directories(
        ${CUDA_TOOLKIT_ROOT_DIR}/lib64
)

set(ArrayFire_DIR /opt/ArrayFire-3.9.0-Linux/share/ArrayFire/cmake)
find_package(ArrayFire REQUIRED)

if(ArrayFire_CUDA_FOUND)
    add_definitions(-DAF_CUDA)
elseif(ArrayFire_OpenCL_FOUND)
    add_definitions(-DAF_OPENCL)
elseif(ArrayFire_CPU_FOUND)
    add_definitions(-DAF_CPU)
endif()

add_subdirectory(lib/googletest)

add_executable(${PROJECT_NAME}
   ... my files
)

add_executable(run_gs_dbscan_tests
 ... my files
)

set(CUDA_LIBS
        libcudart.so
        libcublas.so
        libcusolver.so
)

target_link_libraries(run_gs_dbscan_tests gtest gtest_main ${CUDA_LIBS} ${ArrayFire_LIBRARIES})
target_link_libraries(${PROJECT_NAME} PRIVATE ${CUDA_LIBS} ${ArrayFire_LIBRARIES})

相关环境信息:
nvidia-smi输出:

Mon May 20 12:20:31 2024       
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 550.54.15              Driver Version: 550.54.15      CUDA Version: 12.4     |
|-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA GeForce RTX 3090        Off |   00000000:01:00.0 Off |                  N/A |
|  0%   50C    P8             40W /  390W |      16MiB /  24576MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+
|   1  NVIDIA GeForce RTX 3090        Off |   00000000:4A:00.0 Off |                  N/A |
|  0%   49C    P8             37W /  390W |     628MiB /  24576MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+
                                                                                         
+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI        PID   Type   Process name                              GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|    0   N/A  N/A      1994      G   /usr/lib/xorg/Xorg                              4MiB |
|    0   N/A  N/A      2644      G   /usr/lib/xorg/Xorg                              4MiB |
|    1   N/A  N/A      1994      G   /usr/lib/xorg/Xorg                            150MiB |
|    1   N/A  N/A      2644      G   /usr/lib/xorg/Xorg                            426MiB |
|    1   N/A  N/A      2812      G   /usr/bin/gnome-shell                           24MiB |
+-----------------------------------------------------------------------------------------+

nvcc版本:

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2021 NVIDIA Corporation
Built on Mon_May__3_19:15:13_PDT_2021
Cuda compilation tools, release 11.3, V11.3.109
Build cuda_11.3.r11.3/compiler.29920130_0
解决方法

核心问题定位

错误提示找不到libnvrtc-builtins.so.12.2,本质是CUDA版本冲突:系统NVIDIA驱动对应CUDA 12.4,但项目绑定了CUDA 11.3,导致运行时加载的NVRTC库版本与项目依赖不匹配。

具体修复步骤

  1. 统一CUDA版本(推荐)

    • 升级CUDA Toolkit到12.2或12.4,与当前驱动版本匹配(新驱动对RTX3090的兼容性更好)。
    • 升级后修改CMake中的CUDA_TOOLKIT_ROOT_DIR为新的CUDA路径(如/usr/local/cuda-12.4)。
  2. 临时修复环境变量
    若暂时无法升级CUDA,可强制指定CUDA 11.3的库路径优先加载:

    export LD_LIBRARY_PATH=/usr/local/cuda-11.3/lib64:$LD_LIBRARY_PATH
    

    执行上述命令后再运行测试即可临时生效;如需永久生效,将命令添加到~/.bashrc或~/.zshrc,再执行source ~/.bashrc。

  3. 优化CMake配置
    替换手动指定CUDA库的方式,改用CUDAToolkit提供的官方目标链接,避免版本错误:

    # 移除原有的set(CUDA_LIBS...)代码块
    # 修改target_link_libraries为以下内容
    target_link_libraries(run_gs_dbscan_tests gtest gtest_main CUDA::cudart CUDA::cublas CUDA::cusolver ${ArrayFire_LIBRARIES})
    target_link_libraries(${PROJECT_NAME} PRIVATE CUDA::cudart CUDA::cublas CUDA::cusolver ${ArrayFire_LIBRARIES})
    

    同时移除link_directories(${CUDA_TOOLKIT_ROOT_DIR}/lib64),因为find_package(CUDAToolkit)会自动处理库路径。

  4. 验证ArrayFire兼容性
    确保ArrayFire预编译包或源码编译时使用的CUDA版本与项目绑定的CUDA 11.3一致;若使用预编译包,需下载对应CUDA 11.x版本的ArrayFire安装包。

内容的提问来源于stack exchange,提问作者Hugo Phibbs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 12:23:12