NVCC有没有“静态编译”?

nvcc在编译过程中默认的是动态链接,这样在一台机器上生成的程序拿到另一台装有不同版本的cuda的机器上运行的时候,就会出现找不到.so的错误。这个有什么解决办法么–除了下面两种方法之外:①将源代码copy过去重新生成可执行文件②把两台机器的cuda版本搞成一样的

在对于gcc,有时候也存在类似的问题,就是可执行文件换了地方动态链接失败。但是gcc的处理方法可以很简单直接,譬如直接加上静态编译选项:-static,这样生成的文件可能笨重一些,但是对环境依赖就少多了。

有谁知道nvcc下面有木有类似的选项?找了许多地方,都没找到

楼主您好,我不懂linux, 但是在windows上,这是不可以的:

NV提供了导入库(就是使用静态库的.lib名字,但却链接到动态库,我叫他导入库)版本的cudart.lib(会实际上导致您最终的exe需要动态链接到cudart*.dll的),
但却没有提供静态库版本的cudart.lib,无法静态链接。

所以在windows下试图静态链接作不到的,这是其一。
其二,就算runtime库静态链接了,它还依赖于nvcuda.dll, 这个是driver api的dll, 依然NV没有提供静态库版本。

虽然楼主静态链接不可以,但依然建议:
(1)楼主跟NV购买单独的runtime api和driver api的静态库版本,以便您的程序最终一个exe可以直接使用显卡。无需附加runtime api的dll和显卡驱动的nvcuda.dll
(2)楼主在windows下可以复制cudart*.dll跟随您的exe, 并要求用户安装显卡驱动(从而有nvcuda.dll)。
(3)楼主在linux下可能可以复制.so并安装显卡驱动。

请允许我挖个坟,补充一下2#的横扫斑竹:

最新的CUDA5.5 目前提供了RC版,在特性说明中提到:
Dear CUDA Registered Developer,

The CUDA 5.5 Release Candidate is now available for download. As a CUDA® Registered Developer, you now have access to all the latest features such as:

• Multi-process MPI debugging & profiling
• Single GPU debugging for Linux
• Step-by-step guided performance analysis
• Static CUDA runtime library
• RPM/DEB packaging & new NVIDIA repo

Start developing with CUDA 5.5 RC by upgrading today at developer.nvidia.com/cuda-toolkit

其中“Static CUDA runtime library”可能于LZ有用,请LZ留意。

祝LZ编码顺利~

需要指出的是,CUDA 5.5 RC是2013年5月29日的NVIDIA官方邮件中首次提出的,在一个多月以前,横扫斑竹回答LZ问题的时候,并无任何关于支持“Static CUDA runtime library”的官方信息,横扫斑竹也不可能凭空预言该特性。

3#仅是随着时间推移,对新版本、新特性向LZ的友情提示。