【发布时间】:2018-04-14 21:35:55
【问题描述】:
在编译使用 Google Test 的 CUDA 程序时,nvcc 会发出误报警告:
函数
已声明但从未被引用
一个 MCVE:
// test.cu
#include <gtest/gtest.h>
namespace {
__global__ void a_kernel() {
printf("Works");
}
TEST(ExampleTest, ExampleTestCase) {
a_kernel<<<1, 1>>>();
}
}
编译它给出:
$ nvcc test.cu -lgtest -lgtest_main
test.cu(9): warning: function "<unnamed>::ExampleTest_ExampleTestCase_Test::ExampleTest_ExampleTestCase_Test()" was declared but never referenced
google test 和 CUDA 9.1 的 master 分支证实了这一点(我相信它从 CUDA 9.0 开始发生,并且该错误在 CUDA 8.0 中不存在)。如果测试位于全局命名空间中,则不会发生此问题。
有没有办法禁用这些警告?我知道我可以使用-w 禁用所有警告,但我想保留其他类型的警告。
【问题讨论】:
-
不是你问题的真正答案,但如果你需要一个解决方案来删除这个警告,并且 (a) 不介意在 gtest 内部更改一行并且 (b) 你可以使用 c ++11:转到gtest-internal.h 并将
{}替换为= default;。
标签: cuda googletest nvcc