我正在尝试自学CUDA,我写了一个非常简单的代码(如下所示)。代码使用nvcc编译良好,但链接器向用户定义的函数抛出“未定义的引用”错误。代码有3个文件:main.c,device.cu和device.h。
的main.c :
#include<stdio.h>
#include "device.h"
int main() {
int nDevices;
// Get the number of available devices
getDevices(&nDevices);
printf("Found %d devices\n", nDevices);
return 0;
}
device.h中:
#ifndef DEFINE_H
#define DEFINE_H
void getDevices(int *nDevices);
#endif
device.cu :
#include<cuda.h>
#include "device.h"
void getDevices(int *nDevices) {
*nDevices = 0;
cudaDeviceReset();
cudaGetDeviceCount(nDevices);
}
我编译为
nvcc -c main.c
nvcc -c device.cu
这些命令执行没有任何问题但是当我链接
时nvcc -o main main.o device.o
我得到了
main.o: In function `main':
main.c:(.text+0x10): undefined reference to `getDevices'
collect2: ld returned 1 exit status
然后我在device.cu中注释掉了第1,5和6行,并将其重命名为device.c。当我编译并使用gcc链接它时,它工作正常。看起来我犯了一个非常愚蠢的错误,但我无法弄清楚它是什么。