本机系统环境:
lucas@lucas-wellcom:/usr/local/cuda/lib64$ cat /proc/version
Linux version 3.13.0-40-generic (buildd@comet) (gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1) ) #69-Ubuntu SMP Thu Nov 13 17:53:56 UTC 2014
lucas@lucas-wellcom:/usr/local/cuda/lib64$ cat /etc/issue
Ubuntu 14.04.1 LTS \n \l
lucas@lucas-wellcom:/usr/local/cuda/lib64$
在这里,有一篇关于linux下cuda静态库的文章,但是在文章中,链接的CUDA库确是动态的,链接的是libcudart.so,这样的话,电脑上需要的环境是:
1、电脑有支持CUDA的NVIDIA的GPU
2、安装了CUDA toolkit的开发包(libcudart.so的动态库是在/usr/local/cuda/lib*中)
从CUDA5.5开始,支持static library。如果查看/usr/local/cuda/lib64下,可以看到:
眼尖的同志们应该看到了lbcudart_static.a的静态库。
现在我们就利用这个静态库把我们的CUDA程序也编译成静态的库供第三方调用。
测试例子结构如下:
事先我把lbcudart_static.a拷贝到工程路径下,在工程中有test文件夹中的内容,随后讲解。static_gpu.cu的内容如下:
Makefile和static_gpu.h的内容如下:
为了把cuda的静态库和自己的库弄成一个静态库,在这我弄了一个讨巧的办法:
ar x libcudart_static.a
获得了libcudart_static.a.o,把此文件和自己的代码生成的.o文件一起弄成静态库。
以上操作,生成了libstatic_gpu.a的静态库。现在我们来看看test文件夹中的内容:
上一步生成的libstatic_gpu.a静态库,main_static_gpu.cpp 和Makefile的内容如下:
cuda的静态库依赖了其他的库,所以才会有-ldl -lpthread -lrt
我们查看下LD_LIBRARY_PATH的环境变量:
更了对比,我们对比下这里的例子,我们执行程序:
因为LD_LIBRARY_PATH变量没有cuda动态库的路径,所以程序执行时找不到cuda的动态库。