组织具有共同功能的代码,避免多重定义

时间:2011-11-22 12:42:13

标签: cuda

我有两个cuda内核imageFlow()和cornerDetect(),在他们各自的cu文件中定义。它们共享一个共同的全局函数convolute1D(),它本身也应该在它自己的cu文件中。我不得不在头文件convolution.h中放置它,实现 - 不仅仅是convolute1D的定义。然后将它包含在cornerDetect.cu和imageFlow.cu中,以便从两个内核中使用它。这是因为一切都必须在“相同的编译单元”中。

现在的问题是,在编译之后,convolute1D实际上是在imageFlow.obj和cornerDetect.obj中定义的,因为包含的头部具有该函数的实际实现。

这意味着最终的链接器阶段会对convolute1D定义多次。

一种解决方案是始终使用命名空间,但这就是解决方案吗?这似乎更像是修补问题。我仍然在最后的二进制文件中多次执行convolute1D,如果我有理由对我的imageFlow和cornerDetection使用相同的命名空间怎么办?

1 个答案:

答案 0 :(得分:2)

使用extern定义怎么样?

// convolution.h
extern "C" void convolution1D() {
   ...
}

// imageFlow.cu 
extern "C" void convolution1d();

// call the function when you need
convolution1D();

cornerDetect.cu文件的方法相同。