2012-07-31 83 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