在Windows上使用clang编译CUDA时的重新定义

时间:2017-05-26 06:46:06

标签: c++ cuda clang++

尽管已经问过几乎相同的question,但答案是针对OSX并且不再适用(反正真的很hacky)。

问题是在Windows上使用clang编译cuda时,math_functions.hpp中有大量的重新定义。

通过一些调查,显然cuda决定将math_functions.hppmath_functions.h函数放在namespace std中(这是否合法?),并与{{1中的所有libstdc ++函数相冲突和clang用于编译cuda的标题。

我该如何处理?最好不要采用上一个问题中所示的hacky方式?

旁注

根据clang的documentation,clang可以基于cmath / __global__限定符重载,代码是否应该只编译?

详细信息

版本:
clang 4.0.0(建立像this
libstdc ++来自gcc 7.1.0
cuda 8.0
Windows 10

完整错误输出

__device__

1 个答案:

答案 0 :(得分:1)

我尝试了很多东西。他们失败了。最后,我挖掘了标题,并将字面上的任何有冲突的内容宏观化,这些内容位于

  • cuda的math_functions.hpp
  • clang's __clang_cuda_math_forward_declares.h
  • clang's __clang_cuda_cmath.h

clang使用 DataGridViewCell cell = new DataGridViewTextBoxCell(); DataGridViewTextBoxColumn colFileName = new DataGridViewTextBoxColumn() { CellTemplate = cell, Name = "Value1", HeaderText = "Value 1", DataPropertyName = "Col1" }; DataGridViewCell cell2 = new DataGridViewTextBoxCell(); DataGridViewTextBoxColumn colFileName2 = new DataGridViewTextBoxColumn() { CellTemplate = cell2, Name = "Value2", HeaderText = "Value 2", DataPropertyName = "Col2" }; dataGridView1.Columns.Add(colFileName); dataGridView1.Columns.Add(colFileName2); List<DataPopulate> list = new List<DataPopulate>(); list.Add(new DataPopulate() { Col1 = "tes1", Col2 = "teste2"}); list.Add(new DataPopulate() { Col1 = "tes1", Col2 = "teste2" }); list.Add(new DataPopulate() { Col1 = "tes1", Col2 = "teste2" }); var dataPopulateList = new BindingList<DataPopulate>(list); dataGridView1.DataSource = dataPopulateList; 来检测Windows,只有在使用-fms-compatibility标志时才会定义Windows,但这会导致其他地方出现大量其他错误。

cuda使用_MSC_VER_WIN32的混合来检测Windows。据我所知,只需将所有重新定义的内容宏观化,这只是最简单的方法。

这似乎有效,因为没有出现其他标题错误。