我需要从纯 C函数(位于main.c中)中调用CUDA C函数foo()
(位于gpu.cu中)。我的尝试如下所示:main()
main.c(调用者):
#include "gpu.h" int main(); int main() { foo(); }
gpu.h (
foo()
声明): <--- 这里有问题extern void foo();
gpu.cu(
foo()
定义):#include "gpu.h" extern "C" void foo() { ... }
我得到错误:
gpu.cu(2): error: linkage specification is incompatible with previous "foo" gpu.h(1): here
但是,在不使用头文件的情况下,以下操作确实有效:
main.c(调用者):
void foo(); int main(); int main() { foo(); }
gpu.cu(
foo()
声明和定义):extern "C" void foo(); extern "C" void foo() { ... }
当然,我更喜欢在纯 C 和 CUDA c 代码中使用单个头文件,那么在头文件中使用的正确语法是什么(extern "C"
即使它是 C++ 的东西,我们仍然需要)?我需要 .cuh 扩展名吗?
我只使用 NVCC编译和链接(即纯 C 和 CUDA-C 代码)。
非常感谢。