Windows环境下链接cuRAND库时出现多种错误求助
我来帮你拆解一下这两个错误的根源,然后给出具体的解决办法:
问题分析
你的两次尝试分别踩了不同的坑:
- 第一次的
LNK2019错误:链接器找不到curandCreateGenerator的实现,核心原因有两个——一是带空格的库路径没有被正确识别,二是可能没有明确指定编译64位目标(和你用的x64库不匹配)。 - 第二次的
nvlink fatal错误:你错误地把库路径赋值给了LIBRARIES变量,但这个变量根本不是CUDA工具链会识别的环境变量,nvcc直接把它当成了要编译的输入文件,自然会报错找不到。
解决方案
修复原编译命令(最直接的方法)
修改你的第一个命令,补上64位编译参数,并确保带空格的路径被正确包裹:
nvcc -m64 -o bin\GPU_Methods.dll --shared src\GPU_Utils.cu src\GPU_Rand.cu -L"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.1\lib\x64" -lcurand
这里的关键修改:
-m64:强制生成64位的目标文件,和你指定的x64库路径完全匹配,避免32/64位不兼容导致的链接失败。- 用双引号把
-L后面的路径括起来:Windows下路径包含空格时必须这么做,否则链接器会把空格后的内容当成新参数,根本找不到正确的库目录。
更简洁的写法(利用已有的环境变量)
你已经设置了CUDA_PATH环境变量,nvcc可以自动定位到CUDA的库目录,所以完全可以省略-L参数,直接用:
nvcc -m64 -o bin\GPU_Methods.dll --shared src\GPU_Utils.cu src\GPU_Rand.cu -lcurand
这样nvcc会自动从CUDA_PATH\lib\x64(64位模式下)查找curand.lib,省去手动写长路径的麻烦。
别再用LIBRARIES变量了
那个变量是你自己加的,CUDA工具链根本不认它,直接删掉这个设置就行,完全没必要。
额外需要检查的点
- 确保你用的是64位的VS命令提示符:如果是VS2017,打开
x64 Native Tools Command Prompt for VS 2017来执行编译命令,而不是32位的版本,这样链接器会默认使用64位工具链,避免不必要的兼容问题。 - 验证
curand.lib确实存在:去C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.1\lib\x64目录下看看,如果找不到这个文件,说明你的CUDA安装不完整,需要重新安装或者修复。
内容的提问来源于stack exchange,提问作者JayY
相关产品推荐
相关产品推荐

