【发布时间】:2018-07-26 18:25:28
【问题描述】:
我有以下代码,它只有 cuda9 + gcc7 有错误。 Cuda9 + gcc6 没有编译错误。
这是我为该错误编写的最小复制器。我怀疑这是编译器错误,但我必须修复我的代码才能使用 gcc7。我想知道摆脱编译错误的解决方法。
Cuda 编译工具,9.2 版,V9.2.148
gcc 版本 7.3.0 (Ubuntu 7.3.0-21ubuntu1~16.04)
错误:
$ nvcc test.cu
test.h: In constructor 'TestOp::TestOp()':
test.h:6:54: error: 'Dummy' is not a member of 'TestOp'
//op.h
class OperatorBase {
public:
template <typename T>
inline bool Dummy(T default_value) {
return true;
}
};
template <class Context>
class Operator : public OperatorBase {
};
//test.cu
#include "test.h"
//test.h
#include "op.h"
template <class Context>
class TestOp : public Operator<Context> {
public:
TestOp()
: msg_(
OperatorBase::Dummy<bool>(true)) {}
private:
bool msg_;
};
【问题讨论】:
-
CUDA 9 有多个版本。
nvcc --version的输出是什么? -
为我工作。似乎错误消息与问题中的代码无关。
-
我已经用 cuda 版本更新了我的问题。 @RobertCrovella
-
我要冒昧地说这实际上是一个 gcc 错误,而不是 CUDA 的问题。在这种情况下,Clang、MSVC 和 gcc7 之前的每个 gcc 版本都可以正确编译工具链发出的代码