2012-04-25 3 views
1

У меня есть файл A.cu, содержащий функцию void A(). Я другой файл test_A.c, который вызывает функцию А (CUDA), а также имеет функцию декларациюВызов функции cuda из C

extern void A(); 

Теперь я скомпилировать и скомпоновать их следующим образом

nvcc -c -o A.o A.cu 
gcc -o test_A test_A.c A.o /opt/cuda-4.0/cuda/lib64/libcudart.so 

и я получаю сообщение об ошибке, как

undefined reference to `A' 

Что мне не хватает?

ответ

5

Проблема, вероятно, связана с изменением имени C++. Код CUDA скомпилирован с помощью компилятора C++, а не компилятора C. Если вы сбросите содержимое A.o, вы должны найти символ, называемый как-то вроде _Z1Av, а не A, как ожидается компилятор C.

Чтобы преодолеть это, вы можете использовать следующее объявление в файл A.cu:

extern "C" void A(void) 
{ 
    ....... 
} 

Это покажет компилятор C++, чтобы использовать соглашение C при компиляции коды, и соответствующим образом с именем функция будет записана объектный файл A.o, который может понять компилятор C и компоновщик.

Смежные вопросы