我正在使用VisualStudio2017,平台工具集v141和CUDA工具包9.2。我注意到在用nvcc编译thrust::device_vector时,移动构造函数和移动分配不存在。原因是检查推力库中的__cplusplus宏的值的条件。
正如在/Zc:__cplusplus中所解释的,我将C++语言标准设置为/std:c++17,并另外设置了/std:c++17,以便在msvc中正确定义宏,即201703。但是,对于nvcc编译的文件,宏设置为199711。
我创造了一个简单的案例来再现这个问题。
test.cuh:
#pragma once
#include <iostream>
void test();test.cu:
#include "test.cuh"
void test()
{
std::cout << "CU file: " << __cplusplus << std::endl;
}main.cpp:
#include "test.cuh"
int main()
{
test();
std::cout << "CPP file: " << __cplusplus << std::endl;
return 0;
}产出:
CU file: 199711
CPP file: 201703我正在寻找一个解决方案,也适用于CMake与FindCUDA。
https://stackoverflow.com/questions/52311304
复制相似问题