尽管已经问过几乎相同的question,但答案是针对OSX并且不再适用(反正真的很hacky)。
问题是在Windows上使用clang编译cuda时,math_functions.hpp
中有大量的重新定义。
通过一些调查,显然cuda决定将math_functions.hpp
和math_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__
答案 0 :(得分:1)
我尝试了很多东西。他们失败了。最后,我挖掘了标题,并将字面上的任何有冲突的内容宏观化,这些内容位于
中 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。据我所知,只需将所有重新定义的内容宏观化,这只是最简单的方法。
这似乎有效,因为没有出现其他标题错误。