0

我使用 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 文件的结果。感谢您的建议。

4

1 回答 1

1

我发现我的错误是什么,正在阅读这篇文章。原来我不明白如何在头文件中正确声明全局变量。我的问题与 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];
      }
    }
  }
}
于 2013-02-03T15:19:30.213 回答