5

nvccを使用してコンパイルしようとしている次のコードがあります。

コード:

#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ヘッダーファイルが見つかりません。

何を探すべきか、問題を解決する方法を教えてください。

ありがとう!

4

2 に答える 2

13

@Wilo Maldonado:リンカーフラグ-lcurandを使用し、まだ持っていない場合はさらに-L / path / to / cuda/libsを使用します

于 2012-08-01T02:51:50.510 に答える
0

問題はヘッダーファイルではありません。そうでないと、コンパイルエラーが発生します。リンカーエラーがあります。これらの関数を含むオブジェクトまたはライブラリファイルの場所をリンカに指示する必要があります。

于 2012-07-31T06:50:33.273 に答える