在带有 gcc/g++ 4.6 的 ubuntu 上使用 CUDA 5.0,在使用模板链接 CUDA 代码时出现错误。
cu_array.cu:
#include "cu_array.hpp"
template<class T>
CuArray<T>::CuArray(unsigned int n) {
cudaMalloc(&data,n*sizeof(T));
}
cu_array.hpp:
#pragma once
template<class T>
class CuArray {
public:
CuArray(unsigned int n);
private:
T* data;
};
main.cu:
#include "cu_array.hpp"
int main() {
CuArray<float> a(10);
}
这些与 编译良好nvcc -c
,但与nvcc cu_array.o main.o
给出链接undefined reference to CuArray<float>::CuArray(unsigned int)
。如果我将 cu_array.cu 的内容移动到标题中并且只构建主目录,它使用模板就好了。或者,如果我完全删除模板,代码自然会很好地链接。
我确信对此有一个简单的答案。有任何想法吗?