2015-11-07 3 views
0

Я новичок в программировании CUDA, поэтому сталкиваюсь с проблемами с компиляцией/связыванием файлов. Я пытаюсь скомпилировать файлы .c и .cu. Вот файлы:
p3.c:CUDA linking Ошибка undefined reference

#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 

Возможно, я не буду использовать правильные шаги, чтобы заставить это работать, поэтому, если есть какой-либо другой способ, я должен попробовать, предложения приветствуются. Я также новичок в создании Makefile, поэтому хочу придерживаться команды nvcc на терминале.

ответ

-1

Только что добавлено: extern "c" перед определением load_scheduler. NVCC не смог распознать определение функции, поскольку оно принадлежало файлу .cu, поэтому ошибка.

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