c++ - Visual Studio 2017 msvc vs nvcc __cplusplus 宏不匹配
问题描述
我正在使用 Visual Studio 2017、平台工具集 v141 和 CUDA Toolkit 9.2。我注意到使用 nvcc编译推力::device_vector时不存在移动构造函数和移动赋值。原因是检查Thrust 库中__cplusplus宏的值的条件。
如文档中所述,我将 C++ 语言标准设置为/std:c++17并另外设置/Zc:__cplusplus以便在 msvc 中正确定义宏,即201703。但是,对于 nvcc 编译的文件,宏设置为199711。
我创建了一个简单的案例来重现该问题。
测试.cuh:
#pragma once
#include <iostream>
void test();
测试.cu:
#include "test.cuh"
void test()
{
std::cout << "CU file: " << __cplusplus << std::endl;
}
主.cpp:
#include "test.cuh"
int main()
{
test();
std::cout << "CPP file: " << __cplusplus << std::endl;
return 0;
}
输出:
CU file: 199711
CPP file: 201703
我正在寻找一种也适用于带有 FindCUDA 的 CMake 的解决方案。
解决方案
通过将-Xcompiler /Zc:__cplusplus 传递给 nvcc ,我设法将 __cplusplus 设置为 201402 。由于 nvcc 最多只支持 C++14,这可能是我使用 CUDA 9.2 能得到的最好的。
推荐阅读
- ruby-on-rails - 耙中止!ActiveRecord::NoDatabaseError: FATAL: 数据库“appname_development”不存在
- java - JSON 到 XML,在 json 键中带有 @ 字符
- json - 我无法从数据库加载数据以显示 UIPickerView 的结果
- .net - Powershell winforms 保存默认后台状态
- c - Valgrind 报告无效的读取(和写入)但程序继续执行
- microservices - 微服务学习或培训
- python - 无法在 pycharm 调试器中初始化应用引擎 SDK
- .net - 在 IIS 上对 oauth 的身份验证失败
- python - Keras LSTM 自动编码器:简单的顺序输入到顺序输出
- node.js - done 不是 passport.js 中的函数