类实现的“undefined reference to”编译错误 [duplicate]

"undefined reference to" compile error for class implementation [duplicate]

提问人:Amir Fakhim Babaei 提问时间:5/10/2022 更新时间:5/10/2022 访问量:475

问:

我在四个不同的文件中实现了两个类(每个文件分别为 .cpp/.cu 和 .h)。问题是,当我使用此命令编译代码时:

$ nvcc -lcuda -lineinfo -o test -I src src/schd.cpp src/ctx.cu test.cpp

我收到每个类变量的“未定义引用”错误,如下所示:

/usr/bin/ld: /tmp/tmpxft_000081c8_00000000-9_schd.o: in function `FGPRS::Scheduler::destroyAll()':
schd.cpp:(.text+0x37e): undefined reference to `FGPRS::Scheduler::_poolSize'

它只发生在类变量成员身上,而不是函数上。即使我使用的是 CUDA 编译器 (nvcc),我相信这应该是一个与 C++ 相关的问题,与 CUDA 无关,即使在本机 C++ 编译器(使用 gcc 命令)的情况下也会发生这种情况。

C++ GCC CUDA 链接器 未定义引用

评论

1赞 wohlstad 5/10/2022
难道FGPRS::Scheduler::_poolSize等是静态数据成员吗?如果是这样 - 请看这里:stackoverflow.com/questions/11300652/...
0赞 JaMiT 5/10/2022
“我相信这应该是一个与C++相关的问题”——当你可以证明时,为什么要依靠信念呢?删除您认为不相关的所有内容,看看问题是否仍然存在。(我认为这意味着至少要从 和 中删除足够的代码,以便您可以从编译命令中删除。当您的代码太少,以至于删除更多代码将删除错误时,您就拥有了最小可重现示例 (MRE)。P.S. MRE 应该在您的问题中,以便其他人可以复制、编译和重现错误消息。schd.*test.*src/ctx.cu
0赞 Amir Fakhim Babaei 5/11/2022
@wohlstad 是的,这正是问题所在。我不知道对于静态变量,我也应该有一个定义。谢谢!

答: 暂无答案