Странная ошибка при компиляции кода, который вызывает Surface CUDA API низкого уровня - PullRequest
0 голосов
/ 24 марта 2011

Этот минимальный пример:

int main() 
{
    struct surfaceReference* surfaceReferencePointer;
    cudaGetSurfaceReference(&surfaceReferencePointer, "surfaceReference"); 
}

Сбой при компиляции следующим образом:

nvcc -g -arch=sm_20 -o foo.out foo.cu

Отображение следующего сообщения об ошибке:

foo.cu(4): warning: argument of type "surfaceReference **" is incompatible with parameter of type "const surfaceReference **"
foo.cu(4): warning: argument of type "surfaceReference **" is incompatible with parameter of type "const surfaceReference **"

foo.cu: In function ‘int main()’:
foo.cu:4: error: invalid conversion from ‘surfaceReference**’ to ‘const surfaceReference**’
foo.cu:4: error:   initializing argument 1 of ‘cudaError_t cudaGetSurfaceReference(const surfaceReference**, const char*)’

Я не могу понять, что я делаю неправильно. Я компилирую на Linux Ubuntu 64-битную машину, используя CUDA 3.2.

1 Ответ

0 голосов
/ 26 марта 2011

Указатель struct surfaceReference* должен быть определен как const:

int main() 
{
    const struct surfaceReference* surfaceReferencePointer;
    cudaGetSurfaceReference(&surfaceReferencePointer, "surfaceReference"); 
}

Слава codymanix , который дал правильный ответ в комментариях

...