Вы объявили cuda_function()
как extern "C"
, но затем определили его с помощью C ++. Удалите extern "C"
из вашего delcaration, и он будет работать.
В качестве альтернативы, но бессмысленно, вы можете добавить такое же объявление в файл cuda.cu.
Чтобы уточнить, nvcc - это оболочка, которая разбивает файл на код хоста и код устройства, а затем вызывает компилятор хоста и компилятор устройства соответственно. В старые времена программирования на CUDA nvcc вызывал компилятор хоста в режиме «C», что означало, что вам нужно было поставить extern "C"
на делкарации при вызове из C ++. Возвращаясь к настоящему времени, nvcc по умолчанию использует C ++ для хост-кода, что означает, что вам не нужны эти внешние объекты (если, конечно, остальная часть вашего хост-кода не находится в C).