nvcc undefined对用户定义函数的引用,但与gcc一起使用

时间:2016-04-01 09:32:48

标签: c gcc cuda nvcc

我正在尝试自学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链接它时,它工作正常。看起来我犯了一个非常愚蠢的错误,但我无法弄清楚它是什么。

0 个答案:

没有答案