‘/tmp/tmpxft_0000120b_0000000-10_my_program”中对‘cublasCreate_v2’的未定义引用

Undefined reference to `cublasCreate_v2’ in ‘/tmp/tmpxft_0000120b_0000000-10_my_program”

我尝试在 NVIDIA Tesla P100 显卡(Ubuntu 版本 16.04)上使用 CUDA 9.0 工具包编译代码,代码中使用了 CUBLAS 库。对于编译,我使用以下命令编译“my_program.cu”

nvcc -std=c++11 -L/usr/local/cuda-9.0/lib64 my_program.cu -o mu_program.o -lcublas

但是,我遇到了以下错误:

nvlink error: Undefined reference to 'cublasCreate_v2’in '/tmp/tmpxft_0000120b_0000000-10_my_program’

我已经在编译命令中链接了库路径,为什么还是报错。请帮我解决这个错误。

很明显您正在尝试在设备代码中使用 CUBLAS 库。这与普通主机用法不同,需要特殊的 compilation/linking 步骤。您需要:

  1. 编译正确的设备架构(必须是 cc3.5 或更高版本)
  2. 使用可重定位设备代码linking
  3. link 在 cublas device 库中(除了 cublas 主机库)
  4. link 在 CUDA 设备运行时库
  5. 使用 CUDA 10.0 之前的 CUDA 工具包

编译命令行的以下添加应该可以帮助您:

nvcc -std=c++11 my_program.cu -o my_program.o -lcublas -arch=sm_60 -rdc=true -lcublas_device -lcudadevrt

以上假定您实际使用的是正确安装的 CUDA 9.0。 CUBLAS 设备库已弃用,现在已从较新的 CUDA 工具包中删除(参见 )。