2015-11-07 52 views
0

我是CUDA编程的新手,因此遇到了编译/链接文件的问题。我试图编译.c.cu文件。 以下是文件:
p3.cCUDA链接错误undefined参考

#include <stdlib.h> 
#include <stdio.h> 

extern void load_scheduler(int k, int j); 
int blocks, threads; 

int main(int argc, char* argv[]) 
{ 
    if (argc > 1) 
    { 
     blocks = atoi(argv[1]); 
     threads = atoi(argv[2]); 
    } 
    else 
     exit(1); 

    load_scheduler(blocks, threads); 

} 

而且scheduler.cu文件:

#include <stdlib.h> 
#include <stdio.h> 

__global__ void sched_func() 
{ 
    int j = 6*5*threadIdx.x; 
    printf("%d\n",j); 
} 

void load_scheduler(int b, int n) 
{ 
    sched_func<<< b,n >>>(); 
} 

我编译使用nvcc -c scheduler.cu p3.c这两个文件,它似乎罚款
然而,当我尝试这两个链接文件使用nvcc -o cuda_proj scheduler.o p3.o,我收到一个错误:

p3.o: In function `main': 
p3.c:(.text+0x58): undefined reference to `load_scheduler' 
collect2: ld returned 1 exit status 

我可能没有使用正确的步骤来完成这项工作,所以如果还有其他方法,我应该尝试一下,欢迎提出建议。我也是新创Makefiles所以想坚持在终端上使用nvcc命令。

回答

-1

刚刚加上:extern "c"之前的load_scheduler定义。 NVCC无法识别该功能定义,因为它属于.cu文件,因此出现该错误。

extern "C" 
void load_scheduler(int b, int n) 
{ 
    sched_func<<< b,n >>>(); 
}