使用nvcc我遇到了以下问题。
我使用单独的编译(最后让它与cmake一起运行)并且声明了__device__ __constant__ (extern) type1<type2> var[length]
数组的声明。
这是我的标题:
#include <type.h>
#include <type2.h>
#ifndef GUARD_H_
#define GUARD_H_
namespace NameSpace1{
namespace NameSpace2{
namespace Constants{
__device__ __constant__ extern Type1<Type2> array[10];
__device__ Type1<Type2> accessConstantX(size_t index);
}
}
}
#endif
她的.cu文件:
#include <header.h>
#include <assert.h>
namespace NameSpace1{
namespace NameSpace2{
namespace Constants{
__device__ Type1<Type2> accessConstantX(size_t index){
assert(index <= 9);
return array[index];
}
}
}
}
我从中间单独的编译步骤中得到以下错误:
nvlink error : Undefined reference to '_ZN12NameSpace115NameSpace29Constants17arrayE'
这是由.cu文件中的访问产生的。 谢谢你的建议。
答案 0 :(得分:1)
我发现了我的错误,正在阅读this post。 事实证明,我不明白如何在头文件中正确声明全局变量。我的问题与nvcc无关。感谢@talonmies的帮助,它指出我的方向寻找答案。
这是解决我问题的方法:
这是我的标题:
#include <type.h>
#include <type2.h>
#ifndef GUARD_H_
#define GUARD_H_
namespace NameSpace1{
namespace NameSpace2{
namespace Constants{
extern __device__ __constant__ extern Type1<Type2> array[10];
__device__ Type1<Type2> accessConstantX(size_t index);
}
}
}
#endif
她的.cu文件:
#include <header.h>
#include <assert.h>
namespace NameSpace1{
namespace NameSpace2{
namespace Constants{
__device__ __constant__ Type1<Type2> array[10];
__device__ Type1<Type2> accessConstantX(size_t index){
assert(index <= 9);
return array[index];
}
}
}
}