【发布时间】:2020-01-02 07:15:47
【问题描述】:
抱歉,我坚持使用 VS2013,但我认为这不是问题。相同的代码在 linux 上可以正确编译。我假设我需要定义 uint 而不是编辑 100 多行代码。 我在下面代码的第一行收到“错误:缺少显式类型(假定为“int”)”
__device__ uint inline get_smid(void)
{
uint ret;
asm("mov.u32 %0, %%smid ;" : "=r"(ret) );
return ret;
}
在应用程序的属性中,只有 CUDA => 主机 => 我放入的预处理器定义
WIN32;uint="unsigned int"
这似乎修复了“假定的 int”,但现在我收到“错误:预期的声明” 在源代码中用 unsigned int 替换 uint 将编译不会出错。有很多 uint,这与 linux 构建不同。除了'uint="unsigned int"'之外还需要更多吗?也许是一个开关让 NVCC 接受 uint 而不给出错误?
刚刚发现了很多 ushort,我猜同样的问题。此外,查看 Linux 构建,源代码是使用 gcc 编译的,但链接是使用 nvcc 完成的,因此存在差异。
====示例 CUDA 有 ushort==== 我一定没有正确设置包含,因为这些变量可能可以使用。
【问题讨论】:
-
老式的
typedef unsigned int uint;,或者简单的#define uint unsigned int有什么问题? -
这没有错。维护 Linux 版本代码的人会简单地将其删除。希望他们会在我构建完我的 Windows 版本后将其删除。