我想将程序链接到静态版本的cublas
,但是我得到了一些未定义的引用。命令和错误是
$ nvcc test.cu -o test --cudart=static -ldl -lpthread -lcurand_static -lcublas_static -lculibos
/home/mahmood/cuda_10.1.168/bin/../targets/x86_64-linux/lib/libcublas_static.a(cublas.o): In function `cublasCtxInit(cublasContext**)':
cublas.compute_75.cudafe1.cpp:(.text+0x34b): undefined reference to `cublasLtCtxInit'
cublas.compute_75.cudafe1.cpp:(.text+0x417): undefined reference to `init_gemm_select'
...
...
实际上,库路径很好,并且cublasLtCtxInit
存在于静态库文件中。
$ ls -l /home/mahmood/cuda_10.1.168/lib64/libcublas_static.a
-rw-rw-r-- 1 mahmood mahmood 75127082 Jun 27 16:06 /home/mahmood/cuda_10.1.168/lib64/libcublas_static.a
$ grep cublasLtCtxInit ~/cuda_10.1.168/lib64/libcublas_static.a
Binary file /home/mahmood/cuda_10.1.168/lib64/libcublas_static.a matches
$ echo $LD_LIBRARY_PATH
/home/mahmood/cuda_10.1.168/lib64:
那么,我该如何解决?
答案 0 :(得分:1)
在Makefile
CUDA sample code的conjugateGradient
中可以找到与cublas正确的静态链接顺序。
nvcc
所需的开关是:
-lcublas_static -lcublasLt_static -lculibos
示例:
$ cat t1752.cu
#include <cublas_v2.h>
int main(){
cublasHandle_t h;
cublasCreate(&h);
}
$ nvcc t1752.cu -o t1752 -lcublas_static -lcublasLt_static -lculibos
$