2012-07-31 80 views
4

我有下面的代码,我试图使用nvcc进行编译。CURAND库 - 编译错误 - 未定义的函数参考

代码:

#include <stdio.h> 
#include <stdlib.h> 
#include <cuda.h> 
#include <curand.h> 

int main(void) 
{ 
    size_t n = 100; 
    size_t i; 
    int *hostData; 
    unsigned int *devData; 
    hostData = (int *)calloc(n, sizeof(int)); 
    curandGenerator_t gen; 
    curandCreateGenerator(&gen, CURAND_RNG_PSEUDO_MRG32K3A); 
    curandSetPseudoRandomGeneratorSeed(gen, 12345); 
    cudaMalloc((void **)&devData, n * sizeof(int)); 
    curandGenerate(gen, devData, n); 
    cudaMemcpy(hostData, devData, n * sizeof(int), cudaMemcpyDeviceToHost); 
    for(i = 0; i < n; i++) 
    { 
     printf("%d ", hostData[i]); 
    } 
    printf("\n"); 
    curandDestroyGenerator (gen); 
    cudaFree (devData); 
    free (hostData); 
    return 0; 
} 

这是我收到的输出:

$ nvcc -o RNG7 RNG7.cu 
/tmp/tmpxft_00005da4_00000000-13_RNG7.o: In function `main': 
tmpxft_00005da4_00000000-1_RNG7.cudafe1.cpp:(.text+0x6c): undefined reference to `curandCreateGenerator' 
tmpxft_00005da4_00000000-1_RNG7.cudafe1.cpp:(.text+0x7a): undefined reference to `curandSetPseudoRandomGeneratorSeed' 
tmpxft_00005da4_00000000-1_RNG7.cudafe1.cpp:(.text+0xa0): undefined reference to `curandGenerate' 
tmpxft_00005da4_00000000-1_RNG7.cudafe1.cpp:(.text+0x107): undefined reference to `curandDestroyGenerator' 
collect2: ld returned 1 exit status 

我最初的猜测是,由于某种原因未正确安装CURAND库或无法找到curand。 h头文件。

请让我知道我应该寻找什么或如何解决我的问题。

谢谢!

回答

9

@Wilo马尔多纳多:只使用一个连接标志-lcurand和 另外-L /路径/到/ CUDA /库,如果你没有它已经

+0

谢谢!这工作完美。再次感谢。过去几天一直在为此付出努力。 – 2012-08-01 15:20:04

0

问题不在头文件,否则你会得到一个编译错误。你有一个链接错误。您需要告诉链接器在哪里可以找到包含这些函数的对象或库文件。

+0

我使用CentOS的操作系统和运行在终端的代码。我将如何去告诉链接器在哪里可以找到库文件? – 2012-07-31 07:10:18

+0

我对nvcc工具链并不熟悉,但是如果它被设计成模仿gcc,那么你会在编译器命令行上添加一个或多个'-l'选项来告诉链接器包含这些库。 – 2012-07-31 07:54:04

+0

这与gcc非常相似,我应该告诉链接器包含哪些库? – 2012-08-01 00:22:42